source: flexpart.git/flexpart_code/fpmetbinary_mod_fullload.F90 @ 496c607

FPv9.3.1FPv9.3.1b_testingFPv9.3.2fp9.3.1-20161214-nc4grib2nc4_repair
Last change on this file since 496c607 was 496c607, checked in by Don Morton <Don.Morton@…>, 8 years ago

Initial commit of FPv9.3.1

Currently, this is a clone of snapshot FPv9.3.0

  • Property mode set to 100644
File size: 10.1 KB
Line 
1MODULE fpmetbinary_mod
2
3  !*****************************************************************************
4  !                                                                            *
5  !     Contains data and routines for dumping and loading processed met       *
6  !     fields.                                                                *
7  !     Authors Don Morton (Don.Morton@borealscicomp.com)                      *
8  !             Delia Arnold (deliona.arnold@gmail.com)                        *
9  !                                                                            *
10  !     15 Sep 2015                                                            *
11  !                                                                            *
12  !     Currently, the only data being dumped and loaded has data structures   *
13  !     defined in com_mod.f90.  In the future, perhaps it will be necessary   *
14  !     to use data structures from other parts of the FLEXPART code system.   *
15  !                                                                            *
16  !     Note that these routines need more robustness.  For example, what      *
17  !     what happens if the filename can't be read or written.  Or, what       *
18  !     happens if a read or write fails in any way.  Right now, it's crash    *
19  !     city.                                                                  *
20  !                                                                            *
21  !*****************************************************************************
22
23    USE com_mod
24
25    IMPLICIT NONE
26
27    ! Users may want to change these IO Unit values if they conflict with other parts
28    ! of code
29    INTEGER, PARAMETER :: IOUNIT_DUMP = 33, IOUNIT_LOAD = 34
30    PRIVATE IOUNIT_DUMP, IOUNIT_LOAD, fpio
31
32
33CONTAINS
34
35  !*****************************************************************************
36  !                                                                            *
37  !    Subroutines fpdump() and fpload() provide the public interface to       *
38  !    this module functionality.  I created the PRIVATE fpio() because I      *
39  !    wanted all interactions with variables to be in one place.  The read    *
40  !    and write operations need to be done in exactly the same sequence, so   *
41  !    I felt like keeping them in the same routine would at least allow for   *
42  !    coders to more easily compare the two sequences than if they were       *
43  !    separate.                                                               *
44  !                                                                            *
45  !*****************************************************************************
46
47
48    SUBROUTINE fpdump(filename)
49        CHARACTER(LEN=*), INTENT(IN) :: filename
50
51        OPEN(IOUNIT_DUMP, file=filename, action='WRITE', status='REPLACE', form="unformatted", access="stream")
52        CALL fpio(IOUNIT_DUMP, 'DUMP')
53        CLOSE(IOUNIT_DUMP)
54    END SUBROUTINE fpdump
55
56    SUBROUTINE fpload(filename)
57        CHARACTER(LEN=*), INTENT(IN) :: filename
58
59        OPEN(IOUNIT_LOAD, file=filename, action='READ', status='OLD', form="unformatted", access="stream")
60        CALL fpio(IOUNIT_LOAD, 'LOAD')
61        CLOSE(IOUNIT_LOAD)
62    END SUBROUTINE fpload
63
64
65
66
67
68    SUBROUTINE fpio(iounit, op)
69        IMPLICIT NONE
70        INTEGER, INTENT(IN) :: iounit
71        CHARACTER(LEN=4), INTENT(IN) :: op
72
73        if (op == 'DUMP') THEN
74#ifndef QUICKDUMP
75            WRITE(iounit) path, length
76            WRITE(iounit) ibdate, ibtime, iedate, ietime, bdate, edate
77            WRITE(iounit) ldirect, ideltas, loutstep, loutaver, loutsample, method, lsynctime, outstep
78            WRITE(iounit) ctl, fine, ifine, iout, ipin, iflux, mdomainfill
79            WRITE(iounit) mquasilag,nested_output,ind_source,ind_receptor
80            WRITE(iounit) ind_rel,ind_samp,ioutputforeachrelease,linit_cond, turbswitch
81            WRITE(iounit) mintime,itsplit, lsubgrid,lconvection,lagespectra
82            WRITE(iounit) nageclass, lage, gdomainfill
83            WRITE(iounit) compoint, numpoint, specnum
84            WRITE(iounit) decay, weta, wetb, reldiff, henry, f0
85            WRITE(iounit) density, dquer, dsigma, vsetaver, cunningham, weightmolar
86            WRITE(iounit) vset, schmi, fract, ri, rac, rcl ,rgs, rlu, rm, dryvel, kao, ohreact
87            WRITE(iounit) spec_ass, area_hour, point_hour, area_dow, point_dow
88            WRITE(iounit) nspec, maxpointspec_act, species
89            WRITE(iounit) nx_we, ny_sn, numcolumn, numcolumn_we, numcolumn_sn
90            WRITE(iounit) zcolumn_we, zcolumn_sn, xmassperparticle, acc_mass_we, acc_mass_sn
91            WRITE(iounit) numbwf, wftime, lwindinterv, wfname, wfspec
92            WRITE(iounit) memtime, memind
93            WRITE(iounit) nx,ny,nxmin1,nymin1,nxfield,nuvz,nwz,nz,nmixz,nlev_ec
94            WRITE(iounit) dx,dy,xlon0,ylat0,dxconst,dyconst,height
95            WRITE(iounit) akm, bkm, akz, bkz, aknew, bknew
96            WRITE(iounit) oro, excessoro, lsm, xlanduse
97            WRITE(iounit) uu, vv, uupol, vvpol, ww, tt, qv, pv, rho, drhodz, tth, qvh, pplev, clouds, cloudsh
98            WRITE(iounit) ps, sd, msl, tcc, u10, v10, tt2, td2, lsprec, convprec
99            WRITE(iounit) sshf, ssr, surfstr, ustar, wstar, hmix, tropopause, oli, diffk
100            WRITE(iounit) vdep, numbnests, wfnamen, wfspecn, nxn, nyn, dxn, dyn, xlon0n, ylat0n
101            WRITE(iounit) oron, excessoron, lsmn, xlandusen
102            WRITE(iounit) uun, vvn, wwn, ttn, qvn, pvn, cloudsn, cloudsnh, rhon, drhodzn, tthn, qvhn
103            WRITE(iounit) psn, sdn, msln, tccn, u10n, v10n, tt2n, td2n
104            WRITE(iounit) lsprecn, convprecn, sshfn, ssrn, surfstrn, ustarn, wstarn
105            WRITE(iounit) hmixn, tropopausen, olin, diffkn, vdepn
106            WRITE(iounit) xresoln, yresoln, xln, yln, xrn, yrn
107            WRITE(iounit) xglobal, sglobal, nglobal, switchnorthg, switchsouthg
108            WRITE(iounit) southpolemap, northpolemap
109            WRITE(iounit) landinvent, z0
110            WRITE(iounit) numxgrid, numygrid, numzgrid, dxout, dyout, outlon0, outlat0, xoutshiftn, youtshiftn
111            WRITE(iounit) DEP, DRYDEP, DRYDEPSPEC, WETDEP, OHREA, ASSSPEC
112            WRITE(iounit) xreceptor, yreceptor, receptorarea, creceptor, receptorname, numreceptor
113            WRITE(iounit) numpart, itra1, npoint, nclass, idt, itramem, itrasplit, numparticlecount
114            WRITE(iounit) xtra1, ytra1, ztra1, xmass1, rannumb
115#endif
116
117            ! This IO was actually done above, but it's put in here to help serve to test this
118            ! routine.  After all the writes and reads, it comes to this one, and a program that wants
119            ! to test all this can use this to insure that the values of uu, vv, ww read from the binary file
120            ! are the same as those that were written in
121            WRITE(iounit) uu, vv, ww
122
123
124        ELSE   ! We assume op is 'LOAD'
125#ifndef QUICKDUMP
126            READ(iounit) path, length
127            READ(iounit) ibdate, ibtime, iedate, ietime, bdate, edate
128            READ(iounit) ldirect, ideltas, loutstep, loutaver, loutsample, method, lsynctime, outstep
129            READ(iounit) ctl, fine, ifine, iout, ipin, iflux, mdomainfill
130            READ(iounit) mquasilag,nested_output,ind_source,ind_receptor
131            READ(iounit) ind_rel,ind_samp,ioutputforeachrelease,linit_cond, turbswitch
132            READ(iounit) mintime,itsplit, lsubgrid,lconvection,lagespectra
133            READ(iounit) nageclass, lage, gdomainfill
134            READ(iounit) compoint, numpoint, specnum
135            READ(iounit) decay, weta, wetb, reldiff, henry, f0
136            READ(iounit) density, dquer, dsigma, vsetaver, cunningham, weightmolar
137            READ(iounit) vset, schmi, fract, ri, rac, rcl ,rgs, rlu, rm, dryvel, kao, ohreact
138            READ(iounit) spec_ass, area_hour, point_hour, area_dow, point_dow
139            READ(iounit) nspec, maxpointspec_act, species
140            READ(iounit) nx_we, ny_sn, numcolumn, numcolumn_we, numcolumn_sn
141            READ(iounit) zcolumn_we, zcolumn_sn, xmassperparticle, acc_mass_we, acc_mass_sn
142            READ(iounit) numbwf, wftime, lwindinterv, wfname, wfspec
143            READ(iounit) memtime, memind
144            READ(iounit) nx,ny,nxmin1,nymin1,nxfield,nuvz,nwz,nz,nmixz,nlev_ec
145            READ(iounit) dx,dy,xlon0,ylat0,dxconst,dyconst,height
146            READ(iounit) akm, bkm, akz, bkz, aknew, bknew
147            READ(iounit) oro, excessoro, lsm, xlanduse
148            READ(iounit) uu, vv, uupol, vvpol, ww, tt, qv, pv, rho, drhodz, tth, qvh, pplev, clouds, cloudsh
149            READ(iounit) ps, sd, msl, tcc, u10, v10, tt2, td2, lsprec, convprec
150            READ(iounit) sshf, ssr, surfstr, ustar, wstar, hmix, tropopause, oli, diffk
151            READ(iounit) vdep, numbnests, wfnamen, wfspecn, nxn, nyn, dxn, dyn, xlon0n, ylat0n
152            READ(iounit) oron, excessoron, lsmn, xlandusen
153            READ(iounit) uun, vvn, wwn, ttn, qvn, pvn, cloudsn, cloudsnh, rhon, drhodzn, tthn, qvhn
154            READ(iounit) psn, sdn, msln, tccn, u10n, v10n, tt2n, td2n
155            READ(iounit) lsprecn, convprecn, sshfn, ssrn, surfstrn, ustarn, wstarn
156            READ(iounit) hmixn, tropopausen, olin, diffkn, vdepn
157            READ(iounit) xresoln, yresoln, xln, yln, xrn, yrn
158            READ(iounit) xglobal, sglobal, nglobal, switchnorthg, switchsouthg
159            READ(iounit) southpolemap, northpolemap
160            READ(iounit) landinvent, z0
161            READ(iounit) numxgrid, numygrid, numzgrid, dxout, dyout, outlon0, outlat0, xoutshiftn, youtshiftn
162            READ(iounit) DEP, DRYDEP, DRYDEPSPEC, WETDEP, OHREA, ASSSPEC
163            READ(iounit) xreceptor, yreceptor, receptorarea, creceptor, receptorname, numreceptor
164            READ(iounit) numpart, itra1, npoint, nclass, idt, itramem, itrasplit, numparticlecount
165            READ(iounit) xtra1, ytra1, ztra1, xmass1, rannumb
166#endif
167
168            ! This IO was actually done above, but it's put in here to help serve to test this
169            ! routine.  After all the writes and reads, it comes to this one, and a program that wants
170            ! to test all this can use this to insure that the values of uu, vv, ww read from the binary file
171            ! are the same as those that were written in
172            READ(iounit) uu, vv, ww
173        ENDIF
174    END SUBROUTINE fpio
175
176
177END MODULE fpmetbinary_mod
Note: See TracBrowser for help on using the repository browser.
hosted by ZAMG