Skip to content

Commit 8c39088

Browse files
authored
fixed the UPP crash in Atmos (#525)
* fixed the UPP crash in Atmos * format changes in INITPOST_GFS_NEMS_MPIIO.f reading chemstry diagnostic vars
1 parent 4b10df4 commit 8c39088

File tree

1 file changed

+110
-67
lines changed

1 file changed

+110
-67
lines changed

sorc/ncep_post.fd/INITPOST_GFS_NEMS_MPIIO.f

Lines changed: 110 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -3673,8 +3673,45 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER)
36733673
CUPPT(i,j) = SPVAL
36743674
enddo
36753675
enddo
3676+
3677+
! done with flux file, close it for now
3678+
call nemsio_close(ffile,iret=status)
3679+
deallocate(tmp,recname,reclevtyp,reclev)
3680+
36763681
36773682
3683+
! Retrieve aer fields if it's listed (GOCART)
3684+
print *, 'iostatus for aer file=', iostatusAER
3685+
if(iostatusAER == 0) then ! start reading aer file
3686+
call nemsio_open(rfile,trim(fileNameAER),'read',mpi_comm_comp &
3687+
,iret=status)
3688+
if ( Status /= 0 ) then
3689+
print*,'error opening ',fileNameAER, ' Status = ', Status
3690+
endif
3691+
call nemsio_getfilehead(rfile,iret=status,nrec=nrec)
3692+
print*,'nrec for aer file=',nrec
3693+
allocate(recname(nrec),reclevtyp(nrec),reclev(nrec))
3694+
call nemsio_getfilehead(rfile,iret=iret,recname=recname &
3695+
,reclevtyp=reclevtyp,reclev=reclev)
3696+
if(debugprint)then
3697+
if (me == 0)then
3698+
do i=1,nrec
3699+
print *,'recname,reclevtyp,reclev=',trim(recname(i)),' ', &
3700+
trim(reclevtyp(i)),reclev(i)
3701+
end do
3702+
end if
3703+
end if
3704+
! start reading nemsio aer files using parallel read
3705+
fldsize=(jend-jsta+1)*im
3706+
allocate(tmp(fldsize*nrec))
3707+
print*,'allocate tmp successfully'
3708+
tmp=0.
3709+
call nemsio_denseread(rfile,1,im,jsta,jend,tmp,iret=iret)
3710+
if(iret/=0)then
3711+
print*,"fail to read aer file using mpi io read, stopping"
3712+
stop
3713+
end if
3714+
36783715
! retrieve dust emission fluxes
36793716
do K = 1, nbin_du
36803717
if ( K == 1) VarName='duem001'
@@ -3684,11 +3721,11 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER)
36843721
if ( K == 5) VarName='duem005'
36853722
VcoordName='sfc'
36863723
l=1
3687-
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3688-
,l,nrec,fldsize,spval,tmp &
3689-
,recname,reclevtyp,reclev,VarName,VcoordName&
3724+
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3725+
,l,nrec,fldsize,spval,tmp &
3726+
,recname,reclevtyp,reclev,VarName,VcoordName &
36903727
,duem(1,jsta_2l,K))
3691-
! if(debugprint)print*,'sample ',VarName,' = ',duem(isa,jsa,k)
3728+
if(debugprint)print*,'sample ',VarName,' = ',duem(isa,jsa,k)
36923729
enddo
36933730

36943731
! retrieve dust sedimentation fluxes
@@ -3700,9 +3737,9 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER)
37003737
if ( K == 5) VarName='dust5sd'
37013738
VcoordName='sfc'
37023739
l=1
3703-
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3704-
,l,nrec,fldsize,spval,tmp &
3705-
,recname,reclevtyp,reclev,VarName,VcoordName&
3740+
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3741+
,l,nrec,fldsize,spval,tmp &
3742+
,recname,reclevtyp,reclev,VarName,VcoordName &
37063743
,dusd(1,jsta_2l,K))
37073744
! if(debugprint)print*,'sample ',VarName,' = ',dusd(isa,jsa,k)
37083745
enddo
@@ -3716,10 +3753,10 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER)
37163753
if ( K == 5) VarName='dust5dp'
37173754
VcoordName='sfc'
37183755
l=1
3719-
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3720-
,l,nrec,fldsize,spval,tmp &
3721-
,recname,reclevtyp,reclev,VarName,VcoordName&
3722-
,dudp(1,jsta_2l,K))
3756+
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3757+
,l,nrec,fldsize,spval,tmp &
3758+
,recname,reclevtyp,reclev,VarName,VcoordName &
3759+
,dudp(1,jsta_2l,K))
37233760
print *,'dudp,ck=',maxval(dudp(1:im,jsta:jend,k)), &
37243761
minval(dudp(1:im,jsta:jend,k))
37253762
! if(debugprint)print*,'sample ',VarName,' = ',dudp(isa,jsa,k)
@@ -3734,9 +3771,9 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER)
37343771
if ( K == 5) VarName='dust5wtl'
37353772
VcoordName='sfc'
37363773
l=1
3737-
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3738-
,l,nrec,fldsize,spval,tmp &
3739-
,recname,reclevtyp,reclev,VarName,VcoordName&
3774+
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3775+
,l,nrec,fldsize,spval,tmp &
3776+
,recname,reclevtyp,reclev,VarName,VcoordName &
37403777
,duwt(1,jsta_2l,K))
37413778
enddo
37423779
! retrieve dust scavenging fluxes
@@ -3748,9 +3785,9 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER)
37483785
if ( K == 5) VarName='dust5wtc'
37493786
VcoordName='sfc'
37503787
l=1
3751-
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3752-
,l,nrec,fldsize,spval,tmp &
3753-
,recname,reclevtyp,reclev,VarName,VcoordName&
3788+
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3789+
,l,nrec,fldsize,spval,tmp &
3790+
,recname,reclevtyp,reclev,VarName,VcoordName &
37543791
,dusv(1,jsta_2l,K))
37553792
enddo
37563793

@@ -3763,9 +3800,9 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER)
37633800
if ( K == 5) VarName='ssem005'
37643801
VcoordName='sfc'
37653802
l=1
3766-
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3767-
,l,nrec,fldsize,spval,tmp &
3768-
,recname,reclevtyp,reclev,VarName,VcoordName&
3803+
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3804+
,l,nrec,fldsize,spval,tmp &
3805+
,recname,reclevtyp,reclev,VarName,VcoordName &
37693806
,ssem(1,jsta_2l,K))
37703807
enddo
37713808

@@ -3778,9 +3815,9 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER)
37783815
if ( K == 5) VarName='seas5sd'
37793816
VcoordName='sfc'
37803817
l=1
3781-
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3782-
,l,nrec,fldsize,spval,tmp &
3783-
,recname,reclevtyp,reclev,VarName,VcoordName&
3818+
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3819+
,l,nrec,fldsize,spval,tmp &
3820+
,recname,reclevtyp,reclev,VarName,VcoordName &
37843821
,sssd(1,jsta_2l,K))
37853822
enddo
37863823

@@ -3793,9 +3830,9 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER)
37933830
if ( K == 5) VarName='seas5dp'
37943831
VcoordName='sfc'
37953832
l=1
3796-
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3797-
,l,nrec,fldsize,spval,tmp &
3798-
,recname,reclevtyp,reclev,VarName,VcoordName&
3833+
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3834+
,l,nrec,fldsize,spval,tmp &
3835+
,recname,reclevtyp,reclev,VarName,VcoordName &
37993836
,ssdp(1,jsta_2l,K))
38003837
enddo
38013838

@@ -3808,9 +3845,9 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER)
38083845
if ( K == 5) VarName='seas5wtl'
38093846
VcoordName='sfc'
38103847
l=1
3811-
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3812-
,l,nrec,fldsize,spval,tmp &
3813-
,recname,reclevtyp,reclev,VarName,VcoordName&
3848+
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3849+
,l,nrec,fldsize,spval,tmp &
3850+
,recname,reclevtyp,reclev,VarName,VcoordName &
38143851
,sswt(1,jsta_2l,K))
38153852
enddo
38163853

@@ -3823,9 +3860,9 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER)
38233860
if ( K == 5) VarName='seas1wtc'
38243861
VcoordName='sfc'
38253862
l=1
3826-
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3827-
,l,nrec,fldsize,spval,tmp &
3828-
,recname,reclevtyp,reclev,VarName,VcoordName&
3863+
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3864+
,l,nrec,fldsize,spval,tmp &
3865+
,recname,reclevtyp,reclev,VarName,VcoordName &
38293866
,sssv(1,jsta_2l,K))
38303867
enddo
38313868

@@ -3835,9 +3872,9 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER)
38353872
if ( K == 2) VarName='bcembb'
38363873
VcoordName='sfc'
38373874
l=1
3838-
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3839-
,l,nrec,fldsize,spval,tmp &
3840-
,recname,reclevtyp,reclev,VarName,VcoordName&
3875+
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3876+
,l,nrec,fldsize,spval,tmp &
3877+
,recname,reclevtyp,reclev,VarName,VcoordName &
38413878
,bcem(1,jsta_2l,K))
38423879
enddo
38433880

@@ -3847,9 +3884,9 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER)
38473884
if ( K == 2) VarName='bc2sd'
38483885
VcoordName='sfc'
38493886
l=1
3850-
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3851-
,l,nrec,fldsize,spval,tmp &
3852-
,recname,reclevtyp,reclev,VarName,VcoordName&
3887+
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3888+
,l,nrec,fldsize,spval,tmp &
3889+
,recname,reclevtyp,reclev,VarName,VcoordName &
38533890
,bcsd(1,jsta_2l,K))
38543891
enddo
38553892

@@ -3859,9 +3896,9 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER)
38593896
if ( K == 2) VarName='bc2dp'
38603897
VcoordName='sfc'
38613898
l=1
3862-
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3863-
,l,nrec,fldsize,spval,tmp &
3864-
,recname,reclevtyp,reclev,VarName,VcoordName&
3899+
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3900+
,l,nrec,fldsize,spval,tmp &
3901+
,recname,reclevtyp,reclev,VarName,VcoordName &
38653902
,bcdp(1,jsta_2l,K))
38663903
enddo
38673904

@@ -3871,9 +3908,9 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER)
38713908
if ( K == 2) VarName='bc2wtl'
38723909
VcoordName='sfc'
38733910
l=1
3874-
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3875-
,l,nrec,fldsize,spval,tmp &
3876-
,recname,reclevtyp,reclev,VarName,VcoordName&
3911+
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3912+
,l,nrec,fldsize,spval,tmp &
3913+
,recname,reclevtyp,reclev,VarName,VcoordName &
38773914
,bcwt(1,jsta_2l,K))
38783915
enddo
38793916

@@ -3883,9 +3920,9 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER)
38833920
if ( K == 2) VarName='bc2wtc'
38843921
VcoordName='sfc'
38853922
l=1
3886-
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3887-
,l,nrec,fldsize,spval,tmp &
3888-
,recname,reclevtyp,reclev,VarName,VcoordName&
3923+
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3924+
,l,nrec,fldsize,spval,tmp &
3925+
,recname,reclevtyp,reclev,VarName,VcoordName &
38893926
,bcsv(1,jsta_2l,K))
38903927
enddo
38913928

@@ -3895,9 +3932,9 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER)
38953932
if ( K == 2) VarName='ocembb'
38963933
VcoordName='sfc'
38973934
l=1
3898-
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3899-
,l,nrec,fldsize,spval,tmp &
3900-
,recname,reclevtyp,reclev,VarName,VcoordName&
3935+
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3936+
,l,nrec,fldsize,spval,tmp &
3937+
,recname,reclevtyp,reclev,VarName,VcoordName &
39013938
,ocem(1,jsta_2l,K))
39023939
enddo
39033940

@@ -3907,9 +3944,9 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER)
39073944
if ( K == 2) VarName='oc2sd'
39083945
VcoordName='sfc'
39093946
l=1
3910-
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3911-
,l,nrec,fldsize,spval,tmp &
3912-
,recname,reclevtyp,reclev,VarName,VcoordName&
3947+
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3948+
,l,nrec,fldsize,spval,tmp &
3949+
,recname,reclevtyp,reclev,VarName,VcoordName &
39133950
,ocsd(1,jsta_2l,K))
39143951
enddo
39153952

@@ -3919,9 +3956,9 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER)
39193956
if ( K == 2) VarName='oc2dp'
39203957
VcoordName='sfc'
39213958
l=1
3922-
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3923-
,l,nrec,fldsize,spval,tmp &
3924-
,recname,reclevtyp,reclev,VarName,VcoordName&
3959+
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3960+
,l,nrec,fldsize,spval,tmp &
3961+
,recname,reclevtyp,reclev,VarName,VcoordName &
39253962
,ocdp(1,jsta_2l,K))
39263963
enddo
39273964

@@ -3931,9 +3968,9 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER)
39313968
if ( K == 2) VarName='oc2wtl'
39323969
VcoordName='sfc'
39333970
l=1
3934-
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3935-
,l,nrec,fldsize,spval,tmp &
3936-
,recname,reclevtyp,reclev,VarName,VcoordName&
3971+
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3972+
,l,nrec,fldsize,spval,tmp &
3973+
,recname,reclevtyp,reclev,VarName,VcoordName &
39373974
,ocwt(1,jsta_2l,K))
39383975
enddo
39393976

@@ -3943,24 +3980,24 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER)
39433980
if ( K == 2) VarName='oc2wtc'
39443981
VcoordName='sfc'
39453982
l=1
3946-
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3947-
,l,nrec,fldsize,spval,tmp &
3948-
,recname,reclevtyp,reclev,VarName,VcoordName&
3983+
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3984+
,l,nrec,fldsize,spval,tmp &
3985+
,recname,reclevtyp,reclev,VarName,VcoordName &
39493986
,ocsv(1,jsta_2l,K))
39503987
enddo
39513988
! retrieve MIE AOD
39523989
VarName='maod'
39533990
VcoordName='sfc'
39543991
l=1
3955-
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3956-
,l,nrec,fldsize,spval,tmp &
3957-
,recname,reclevtyp,reclev,VarName,VcoordName&
3992+
call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u &
3993+
,l,nrec,fldsize,spval,tmp &
3994+
,recname,reclevtyp,reclev,VarName,VcoordName &
39583995
,maod(1,jsta_2l))
39593996

39603997

39613998
! done with flux file, close it for now
3962-
call nemsio_close(ffile,iret=status)
3963-
deallocate(tmp,recname,reclevtyp,reclev)
3999+
! call nemsio_close(ffile,iret=status)
4000+
! deallocate(tmp,recname,reclevtyp,reclev)
39644001

39654002
!lzhang
39664003
!! retrieve sfc mass concentration
@@ -4005,6 +4042,12 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER)
40054042
! ,recname,reclevtyp,reclev,VarName,VcoordName &
40064043
! ,ducmass25)
40074044
! if(debugprint)print*,'sample ',VarName,' = ',ducmass25(isa,jsa)
4045+
4046+
if (me == 0) print *,'after aer files reading,mype=',me
4047+
call nemsio_close(rfile,iret=status)
4048+
deallocate(tmp,recname,reclevtyp,reclev)
4049+
end if ! end of aer file read
4050+
40084051
! pos east
40094052
call collect_loc(gdlat,dummy)
40104053
if(me == 0)then

0 commit comments

Comments
 (0)