Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Gnssrwnd1.0 #747

Open
wants to merge 49 commits into
base: develop
Choose a base branch
from
Open

Gnssrwnd1.0 #747

wants to merge 49 commits into from

Conversation

KariA-Spire
Copy link

@KariA-Spire KariA-Spire commented May 13, 2024

Description

Type of Change

New GNSS-R ocean wind speed observation operator and assimilation capability in GSI
This source code can directly assimilate GNSS-R L2 ocean wind speed retrievals from commercial Spire Global, Inc. and NASA/CYGNSS satellites

Resolves #628

New feature (non-breaking change which adds functionality)
How Has This Been Tested?
Checklist

My code follows the style guidelines of this project
I have performed a self-review of my code
I have commented my code, particularly in hard-to-understand areas
Any dependent changes have been merged and published
File Changes

M gsimain.f90

M gsi_obOperTypeManager.F90

M intjo.f90

M _rhs.F90

M obsmod.F90

M setuprhsall.f90

M statsconv.f90

M convinfo.f90

M read_obs.F90

N gsi_gnssrspdOper.F90

N intgnssrspd.f90

N m_gnssrspdNode.F90

N read_gnssrspd.f90

N setupgnssrspd.f90

N stpgnssrspd.f90

Link to the forked branch:https://github.com/KariA-Spire/GSI/tree/gnssrwnd1.0

Note: Upon request, we can facilitate source code for NCEP-flavor BUFR encoders, BUFR files, and JEDI/IODA converters. We can also guide users on observation error and bias correction treatment on an "as-time-permits" basis.

Spire Global, Inc. developed this assimilation capability under partial funding from the NASA CYGNSS ROSES-2020 Grant number 80NSSC21K1120.

KariA-Spire and others added 19 commits August 29, 2023 15:44
Added the GNSS-R ocean wind speed assimilation to GSI. 
The following source code routines have been added or changed:
1.	gsi_gnssrspdOper.F90 
2.	intgnssrspd.f90
3.	m_gnssrspdNode.F90
4.	read_gnssrspd.f90
5.	setupgnssrspd.f90
6.	55 stpgnssrspd.f90
7.	23 gsimain.f90
8.	gsi_obOperTypeManager.F90
9.	intjo.f90
10.	rhs.F90
11.	obsmod.F90
12.	setuprhsall.f90
13.	statsconv.f90
14.	convinfo.f90
15.	read_obs.F90
Merge remote-tracking branch 'upstream/develop' into develop

Conflicts:
	src/gsi/intjo.f90
	src/gsi/obsmod.F90
	src/gsi/setuprhsall.f90
	src/gsi/statsconv.f90
Removed repeated block and merge conflicts
@emilyhcliu
Copy link
Contributor

Great!! This is exactly what we need.
I will review it.

@RussTreadon-NOAA
Copy link
Contributor

Thank you @emilyhcliu

src/gsi/convinfo.f90 Outdated Show resolved Hide resolved
L415: used constant one
L420: append 1.5 with _r_kind
Removed use intradmod, only: setrad
@RussTreadon-NOAA
Copy link
Contributor

Please update KariA-Spire:gnssrwnd1.0 to the current head of NOAA-EMC/GSI develop. gnssrwnd1.0 is 4 commits behind the current head of develop.

Changed  to ictype(nc) == 600
Changed nty == 600
Removed this block. 
!    Process observations with reported pressure
     else

        presw = ten*exp(dpres)
        dpres = dpres-log(psges)
        drpx=zero
        if(nty >= 280 .and. nty < 290)then
           dpresave=dpres
           dpres=-goverrd*data(ihgt,i)/tges(1)
           if(nty < 283)drpx=abs(dpres-dpresave)*factw*thirty
        end if
Might need to be added in the future if gnss-r l2 wind speed retrievals include observations with reported pressures.
@RussTreadon-NOAA
Copy link
Contributor

Thank you @KariA-Spire for recent updates. Please update KariA-Spire:gnssrwnd1.0 with the current head of NOAA-EMC:develop. The last commit to develop enabled the Orion Rocky 9 build. We want to test your branch on Orion.

@RussTreadon-NOAA
Copy link
Contributor

WCOSS2 (Dogwood) ctest
Build KariA-Spire:gnssrwnd1.0 at 8ad5c74. Remove double declaration of dlnpsob in src/gsi/read_gnssrspd.f90. Run ctests with following results

Test project /lfs/h2/emc/da/noscrub/russ.treadon/git/gsi/pr747/build
    Start 1: global_4denvar
    Start 2: rtma
    Start 3: rrfs_3denvar_rdasens
    Start 4: hafs_4denvar_glbens
    Start 5: hafs_3denvar_hybens
    Start 6: global_enkf
1/6 Test #3: rrfs_3denvar_rdasens .............   Passed  731.17 sec
2/6 Test #6: global_enkf ......................   Passed  918.48 sec
3/6 Test #2: rtma .............................   Passed  1032.55 sec
4/6 Test #5: hafs_3denvar_hybens ..............   Passed  1215.66 sec
5/6 Test #4: hafs_4denvar_glbens ..............   Passed  1274.36 sec
6/6 Test #1: global_4denvar ...................   Passed  1743.76 sec

100% tests passed, 0 tests failed out of 6

Total Test time (real) = 1744.04 sec

@KariA-Spire
Copy link
Author

@RussTreadon-NOAA, I want to give you a big THANK YOU for the thorough review. I believe I have addressed all of your latest comments, but please let me know if you have any additional concerns and the next steps.

Also, thank you very much @emilyhcliu, @xincjin-NOAA, and @ilianagenkova for your reviews and comments.

Best regards!
Kari

@xincjin-NOAA
Copy link
Contributor

@KariA-Spire Could you send me an example BUFR file of the data so that I can make a test run for all these codes? In addition, I am wondering if you could send me the source code for NCEP-flavor BUFR encoders? I am suppose to assimilate the GNSS_R wind speed in GSI, the source code will be very helpful. Thanks!

Xin

@KariA-Spire
Copy link
Author

@xincjin-NOAA, could you please send me an email with your request so I can forward it to the appropriate individuals at Spire. Karina . Apodaca @ spire . com

@xincjin-NOAA
Copy link
Contributor

@xincjin-NOAA, could you please send me an email with your request so I can forward it to the appropriate individuals at Spire. Karina . Apodaca @ spire . com

Thank you so much! I have sent an email request to the email above.

Xin

@RussTreadon-NOAA
Copy link
Contributor

Thank you @xincjin-NOAA for your comment and request. I'm glad to hear that you will test the code with data. None of our existing GSI regression tests exercise the new code.

If it does not take too long to obtain data and run run GNSS_R wind data through the code, we will keep this PR open until tests confirm that the code works on WCOSS2 and/or NOAA RDHPCS machines as expected.

@RussTreadon-NOAA
Copy link
Contributor

Hercules ctest
Install KariA-Spire:gnssrwnd1.0 at 16a0149 on Hercules. Run ctests with following results

Test project /work/noaa/da/rtreadon/git/gsi/pr747/build
    Start 1: global_4denvar
    Start 2: rtma
    Start 3: rrfs_3denvar_rdasens
    Start 4: hafs_4denvar_glbens
    Start 5: hafs_3denvar_hybens
    Start 6: global_enkf
1/6 Test #3: rrfs_3denvar_rdasens .............   Passed  545.52 sec
2/6 Test #6: global_enkf ......................   Passed  906.54 sec
3/6 Test #2: rtma .............................   Passed  1264.87 sec
4/6 Test #5: hafs_3denvar_hybens ..............   Passed  1392.48 sec
5/6 Test #4: hafs_4denvar_glbens ..............   Passed  1457.69 sec
6/6 Test #1: global_4denvar ...................   Passed  1680.99 sec

100% tests passed, 0 tests failed out of 6

Total Test time (real) = 1681.00 sec

@ilianagenkova
Copy link
Contributor

@KariA-Spire , where from did you read the GNSS-R data you assimilated? In NCEP at the moment we have gpsro and gpsipw, but as far as I know they don't contain wind info.

@RussTreadon-NOAA
Copy link
Contributor

GSI develop will become the GSI package included in GFS v17. NCO compiles codes in debug mode with a flag for unused variables. Unused variables must be removed from implementation code. The following source code files in KariA-Spire:gnssrwnd1.0 contain unused variables

src/gsi/gsi_gnssrspdOper.F90(63): remark #7712: This variable has not been used.   [INIT_PASS]
src/gsi/gsi_gnssrspdOper.F90(63): remark #7712: This variable has not been used.   [LAST_PASS]
src/gsi/read_gnssrspd.f90(1): remark #7712: This variable has not been used.   [GSTIME]
src/gsi/read_gnssrspd.f90(41): remark #7712: This variable has not been used.   [TINY_R_KIND]
src/gsi/read_gnssrspd.f90(41): remark #7712: This variable has not been used.   [HUGE_R_KIND]
src/gsi/read_gnssrspd.f90(42): remark #7712: This variable has not been used.   [EPS]
src/gsi/read_gnssrspd.f90(42): remark #7712: This variable has not been used.   [OMEPS]
src/gsi/read_gnssrspd.f90(42): remark #7712: This variable has not been used.   [RV]
src/gsi/read_gnssrspd.f90(42): remark #7712: This variable has not been used.   [GRAV]
src/gsi/read_gnssrspd.f90(47): remark #7712: This variable has not been used.   [ICSUBTYPE]
src/gsi/read_gnssrspd.f90(48): remark #7712: This variable has not been used.   [ITHIN_CONV]
src/gsi/read_gnssrspd.f90(48): remark #7712: This variable has not been used.   [RMESH_CONV]
src/gsi/read_gnssrspd.f90(48): remark #7712: This variable has not been used.   [PMESH_CONV]
src/gsi/read_gnssrspd.f90(49): remark #7712: This variable has not been used.   [PERTURB_OBS]
src/gsi/read_gnssrspd.f90(49): remark #7712: This variable has not been used.   [PERTURB_FACT]
src/gsi/read_gnssrspd.f90(51): remark #7712: This variable has not been used.   [AIRCRAFT_T_BC]
src/gsi/read_gnssrspd.f90(51): remark #7712: This variable has not been used.   [AIRCRAFT_T_BC_POF]
src/gsi/read_gnssrspd.f90(51): remark #7712: This variable has not been used.   [AIRCRAFT_T_BC_EXT]
src/gsi/read_gnssrspd.f90(52): remark #7712: This variable has not been used.   [ETABL]
src/gsi/read_gnssrspd.f90(53): remark #7712: This variable has not been used.   [ETABL_PS]
src/gsi/read_gnssrspd.f90(53): remark #7712: This variable has not been used.   [ISUBLE_PS]
src/gsi/read_gnssrspd.f90(53): remark #7712: This variable has not been used.   [MAXSUB_PS]
src/gsi/read_gnssrspd.f90(54): remark #7712: This variable has not been used.   [ETABL_Q]
src/gsi/read_gnssrspd.f90(54): remark #7712: This variable has not been used.   [ISUBLE_Q]
src/gsi/read_gnssrspd.f90(54): remark #7712: This variable has not been used.   [MAXSUB_Q]
src/gsi/read_gnssrspd.f90(55): remark #7712: This variable has not been used.   [ETABL_T]
src/gsi/read_gnssrspd.f90(55): remark #7712: This variable has not been used.   [ISUBLE_T]
src/gsi/read_gnssrspd.f90(55): remark #7712: This variable has not been used.   [MAXSUB_T]
src/gsi/read_gnssrspd.f90(56): remark #7712: This variable has not been used.   [ETABL_UV]
src/gsi/read_gnssrspd.f90(56): remark #7712: This variable has not been used.   [ISUBLE_UV]
src/gsi/read_gnssrspd.f90(56): remark #7712: This variable has not been used.   [MAXSUB_UV]
src/gsi/read_gnssrspd.f90(57): remark #7712: This variable has not been used.   [BTABL_PS]
src/gsi/read_gnssrspd.f90(58): remark #7712: This variable has not been used.   [BTABL_Q]
src/gsi/read_gnssrspd.f90(59): remark #7712: This variable has not been used.   [BTABL_T]
src/gsi/read_gnssrspd.f90(60): remark #7712: This variable has not been used.   [BTABL_UV]
src/gsi/read_gnssrspd.f90(61): remark #7712: This variable has not been used.   [IWINBGN]
src/gsi/read_gnssrspd.f90(61): remark #7712: This variable has not been used.   [THIN4D]
src/gsi/read_gnssrspd.f90(62): remark #7712: This variable has not been used.   [NJQC]
src/gsi/read_gnssrspd.f90(63): remark #7712: This variable has not been used.   [USE_ALL]
src/gsi/read_gnssrspd.f90(83): remark #7712: This variable has not been used.   [LTOB]
src/gsi/read_gnssrspd.f90(83): remark #7712: This variable has not been used.   [LQOB]
src/gsi/read_gnssrspd.f90(83): remark #7712: This variable has not been used.   [LUVOB]
src/gsi/read_gnssrspd.f90(83): remark #7712: This variable has not been used.   [LPSOB]
src/gsi/read_gnssrspd.f90(84): remark #7712: This variable has not been used.   [LUSE]
src/gsi/read_gnssrspd.f90(87): remark #7712: This variable has not been used.   [HDSTR]
src/gsi/read_gnssrspd.f90(87): remark #7712: This variable has not been used.   [SFMRSTR]
src/gsi/read_gnssrspd.f90(88): remark #7712: This variable has not been used.   [PSFSTR]
src/gsi/read_gnssrspd.f90(88): remark #7712: This variable has not been used.   [PRSSTR]
src/gsi/read_gnssrspd.f90(88): remark #7712: This variable has not been used.   [G10STR]
src/gsi/read_gnssrspd.f90(88): remark #7712: This variable has not been used.   [QCMSTR]
src/gsi/read_gnssrspd.f90(89): remark #7712: This variable has not been used.   [OBS_REGION]
src/gsi/read_gnssrspd.f90(93): remark #7712: This variable has not been used.   [BULSTR1]
src/gsi/read_gnssrspd.f90(93): remark #7712: This variable has not been used.   [BULSTR2]
src/gsi/read_gnssrspd.f90(94): remark #7712: This variable has not been used.   [OBSBUL]
src/gsi/read_gnssrspd.f90(100): remark #7712: This variable has not been used.   [KL]
src/gsi/read_gnssrspd.f90(100): remark #7712: This variable has not been used.   [K1]
src/gsi/read_gnssrspd.f90(100): remark #7712: This variable has not been used.   [K2]
src/gsi/read_gnssrspd.f90(100): remark #7712: This variable has not been used.   [J]
src/gsi/read_gnssrspd.f90(101): remark #7712: This variable has not been used.   [IRET]
src/gsi/read_gnssrspd.f90(101): remark #7712: This variable has not been used.   [LEVS]
src/gsi/read_gnssrspd.f90(108): remark #7712: This variable has not been used.   [ITHIN]
src/gsi/read_gnssrspd.f90(113): remark #7712: This variable has not been used.   [ITYPEY]
src/gsi/read_gnssrspd.f90(114): remark #7712: This variable has not been used.   [IERR_PS]
src/gsi/read_gnssrspd.f90(114): remark #7712: This variable has not been used.   [IERR_Q]
src/gsi/read_gnssrspd.f90(114): remark #7712: This variable has not been used.   [IERR_T]
src/gsi/read_gnssrspd.f90(114): remark #7712: This variable has not been used.   [IERR_UV]
src/gsi/read_gnssrspd.f90(114): remark #7712: This variable has not been used.   [NCOUNT_PS]
src/gsi/read_gnssrspd.f90(114): remark #7712: This variable has not been used.   [NCOUNT_Q]
src/gsi/read_gnssrspd.f90(114): remark #7712: This variable has not been used.   [NCOUNT_T]
src/gsi/read_gnssrspd.f90(114): remark #7712: This variable has not been used.   [NCOUNT_UV]
src/gsi/read_gnssrspd.f90(116): remark #7712: This variable has not been used.   [P_QM]
src/gsi/read_gnssrspd.f90(116): remark #7712: This variable has not been used.   [G_QM]
src/gsi/read_gnssrspd.f90(116): remark #7712: This variable has not been used.   [T_QM]
src/gsi/read_gnssrspd.f90(116): remark #7712: This variable has not been used.   [Q_QM]
src/gsi/read_gnssrspd.f90(116): remark #7712: This variable has not been used.   [UV_QM]
src/gsi/read_gnssrspd.f90(116): remark #7712: This variable has not been used.   [PS_QM]
src/gsi/read_gnssrspd.f90(119): remark #7712: This variable has not been used.   [NLEVP]
src/gsi/read_gnssrspd.f90(120): remark #7712: This variable has not been used.   [PFLAG]
src/gsi/read_gnssrspd.f90(121): remark #7712: This variable has not been used.   [NTMP]
src/gsi/read_gnssrspd.f90(121): remark #7712: This variable has not been used.   [IIOUT]
src/gsi/read_gnssrspd.f90(122): remark #7712: This variable has not been used.   [KK]
src/gsi/read_gnssrspd.f90(122): remark #7712: This variable has not been used.   [KLON1]
src/gsi/read_gnssrspd.f90(122): remark #7712: This variable has not been used.   [KLAT1]
src/gsi/read_gnssrspd.f90(122): remark #7712: This variable has not been used.   [KLONP1]
src/gsi/read_gnssrspd.f90(122): remark #7712: This variable has not been used.   [KLATP1]
src/gsi/read_gnssrspd.f90(124): remark #7712: This variable has not been used.   [NMIND]
src/gsi/read_gnssrspd.f90(125): remark #7712: This variable has not been used.   [NIB]
src/gsi/read_gnssrspd.f90(127): remark #7712: This variable has not been used.   [IBIT]
src/gsi/read_gnssrspd.f90(147): remark #7712: This variable has not been used.   [RMESH]
src/gsi/read_gnssrspd.f90(149): remark #7712: This variable has not been used.   [TOE]
src/gsi/read_gnssrspd.f90(149): remark #7712: This variable has not been used.   [QOE]
src/gsi/read_gnssrspd.f90(149): remark #7712: This variable has not been used.   [PSOE]
src/gsi/read_gnssrspd.f90(149): remark #7712: This variable has not been used.   [VAR_JB]
src/gsi/read_gnssrspd.f90(153): remark #7712: This variable has not been used.   [U00]
src/gsi/read_gnssrspd.f90(153): remark #7712: This variable has not been used.   [V00]
src/gsi/read_gnssrspd.f90(153): remark #7712: This variable has not been used.   [U0]
src/gsi/read_gnssrspd.f90(153): remark #7712: This variable has not been used.   [V0]
src/gsi/read_gnssrspd.f90(154): remark #7712: This variable has not been used.   [DX]
src/gsi/read_gnssrspd.f90(154): remark #7712: This variable has not been used.   [DY]
src/gsi/read_gnssrspd.f90(154): remark #7712: This variable has not been used.   [DX1]
src/gsi/read_gnssrspd.f90(154): remark #7712: This variable has not been used.   [DY1]
src/gsi/read_gnssrspd.f90(154): remark #7712: This variable has not been used.   [W00]
src/gsi/read_gnssrspd.f90(154): remark #7712: This variable has not been used.   [W10]
src/gsi/read_gnssrspd.f90(154): remark #7712: This variable has not been used.   [W01]
src/gsi/read_gnssrspd.f90(154): remark #7712: This variable has not been used.   [W11]
src/gsi/read_gnssrspd.f90(155): remark #7712: This variable has not been used.   [WDIR]
src/gsi/read_gnssrspd.f90(155): remark #7712: This variable has not been used.   [WSPD]
src/gsi/read_gnssrspd.f90(156): remark #7712: This variable has not been used.   [TOB]
src/gsi/read_gnssrspd.f90(156): remark #7712: This variable has not been used.   [UOB]
src/gsi/read_gnssrspd.f90(156): remark #7712: This variable has not been used.   [VOB]
src/gsi/read_gnssrspd.f90(156): remark #7712: This variable has not been used.   [QOB]
src/gsi/read_gnssrspd.f90(156): remark #7712: This variable has not been used.   [RROB]
src/gsi/read_gnssrspd.f90(157): remark #7712: This variable has not been used.   [RHOB]
src/gsi/read_gnssrspd.f90(157): remark #7712: This variable has not been used.   [TDOB]
src/gsi/read_gnssrspd.f90(158): remark #7712: This variable has not been used.   [POB_MB]
src/gsi/read_gnssrspd.f90(158): remark #7712: This variable has not been used.   [POB_CB]
src/gsi/read_gnssrspd.f90(158): remark #7712: This variable has not been used.   [POB_PA]
src/gsi/read_gnssrspd.f90(159): remark #7712: This variable has not been used.   [PSOB_MB]
src/gsi/read_gnssrspd.f90(159): remark #7712: This variable has not been used.   [PSOB_CB]
src/gsi/read_gnssrspd.f90(159): remark #7712: This variable has not been used.   [PSOB_PA]
src/gsi/read_gnssrspd.f90(160): remark #7712: This variable has not been used.   [QMAXERR]
src/gsi/read_gnssrspd.f90(161): remark #7712: This variable has not been used.   [DLNPOB]
src/gsi/read_gnssrspd.f90(161): remark #7712: This variable has not been used.   [PPB]
src/gsi/read_gnssrspd.f90(162): remark #7712: This variable has not been used.   [CRIT1]
src/gsi/read_gnssrspd.f90(162): remark #7712: This variable has not been used.   [TIMEDIF]
src/gsi/read_gnssrspd.f90(162): remark #7712: This variable has not been used.   [XMESH]
src/gsi/read_gnssrspd.f90(162): remark #7712: This variable has not been used.   [PMESH]
src/gsi/read_gnssrspd.f90(163): remark #7712: This variable has not been used.   [SSTIME]
src/gsi/read_gnssrspd.f90(165): remark #7712: This variable has not been used.   [ES]
src/gsi/read_gnssrspd.f90(165): remark #7712: This variable has not been used.   [QSAT]
src/gsi/read_gnssrspd.f90(165): remark #7712: This variable has not been used.   [RHOB_CALC]
src/gsi/read_gnssrspd.f90(165): remark #7712: This variable has not been used.   [TDOB_CALC]
src/gsi/read_gnssrspd.f90(165): remark #7712: This variable has not been used.   [TDRY]
src/gsi/read_gnssrspd.f90(166): remark #7712: This variable has not been used.   [DUMMY]
src/gsi/read_gnssrspd.f90(167): remark #7712: This variable has not been used.   [DEL]
src/gsi/read_gnssrspd.f90(167): remark #7712: This variable has not been used.   [EDIFF]
src/gsi/read_gnssrspd.f90(167): remark #7712: This variable has not been used.   [JBMIN]
src/gsi/read_gnssrspd.f90(168): remark #7712: This variable has not been used.   [TVFLG]
src/gsi/read_gnssrspd.f90(170): remark #7712: This variable has not been used.   [PRESL]
src/gsi/read_gnssrspd.f90(173): remark #7712: This variable has not been used.   [OBSTMP]
src/gsi/read_gnssrspd.f90(174): remark #7712: This variable has not been used.   [OBSWND]
src/gsi/read_gnssrspd.f90(175): remark #7712: This variable has not been used.   [OBSFMR]
src/gsi/read_gnssrspd.f90(176): remark #7712: This variable has not been used.   [OBSMST]
src/gsi/read_gnssrspd.f90(177): remark #7712: This variable has not been used.   [OBSPRS]
src/gsi/read_gnssrspd.f90(178): remark #7712: This variable has not been used.   [OBSPSF]
src/gsi/read_gnssrspd.f90(179): remark #7712: This variable has not been used.   [OBSG10]
src/gsi/read_gnssrspd.f90(180): remark #7712: This variable has not been used.   [OBSQCM]
src/gsi/read_gnssrspd.f90(187): remark #7712: This variable has not been used.   [PRESL_THIN]
src/gsi/setupgnssrspd.f90(53): remark #7712: This variable has not been used.   [AIRCRAFT_RECON]
src/gsi/setupgnssrspd.f90(120): remark #7712: This variable has not been used.   [DPRESAVE]
src/gsi/statsconv.f90(132): remark #7712: This variable has not been used.   [NREADGNSSRSPD]
src/gsi/statsconv.f90(132): remark #7712: This variable has not been used.   [NKEEPGNSSRSPD]

It's possible that not all the above variables are unused. We need to check the above variables in the indicate routines to see if they are truly not used. Those that are not used need to be removed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

GNSS-R L2 ocean wind speed assimilation (Spire Global, Inc. and NASA/CYGNSS)
5 participants