!================================================================= !================================================================= !================================================================= ! ===== ===== ! ===== dataformats.inc ===== ! ===== --------------- ===== ! ===== ATCF a-, b- and f-deck data records ===== ! ===== ===== !================================================================= !================================================================= !================================================================= !----------------------------------------------------------------- ! Note: I added the SEQUENCE statements back in because the NCEP ! IBM mainframe would not compile dataio.f without them. ! - A. Schrader, 03/2004 ! SEQUENCE forces the physical storage order so a derived ! type can be used in common blocks and be equivalenced. ! It can prevent compilers from aligning memory, so it may ! cause a slight degradation in I/O performance. Comment ! out to allow the compile to align the structure. !----------------------------------------------------------------- !-------------- ! Set max sizes !-------------- integer, parameter :: aidTauMax = 61 integer, parameter :: aidRadMax = 4 integer, parameter :: objectiveAidsTaus = 200 integer, parameter :: bigAidMax = 1300 integer, parameter :: aDeckMax = 500 integer, parameter :: eDeckMax = 500 integer, parameter :: fixLineMax = 450 integer, parameter :: magic_Num = 25931 !---------------------------- ! Fix Format type definitions !---------------------------- integer, parameter :: dvtsType = 10 integer, parameter :: dvtoType = 20 integer, parameter :: micrType = 30 integer, parameter :: scatType = 31 integer, parameter :: rdrType = 40 integer, parameter :: aircType = 50 integer, parameter :: dropType = 60 integer, parameter :: analType = 70 type atcf_record sequence character (len = 2) :: basin character (len = 2) :: cyNum character (len = 10) :: dtg character (len = 2) :: techNum character (len = 4) :: tech character (len = 3) :: tau character (len = 4) :: latNS character (len = 5) :: lonEW character (len = 3) :: Vmax character (len = 4) :: mslp character (len = 2) :: ty character (len = 3) :: rad character (len = 3) :: windCode character (len = 4), dimension(4) :: radii character (len = 4) :: radp character (len = 4) :: rrp character (len = 3) :: mrd character (len = 3) :: gusts character (len = 3) :: eye character (len = 3) :: subRegion character (len = 3) :: maxSeas character (len = 3) :: initials character (len = 3) :: dir character (len = 3) :: speed character (len = 10) :: stormName character (len = 1) :: depth character (len = 2) :: seas character (len = 3) :: seasCode character (len = 4), dimension(4) :: seasRad character (len = 20) :: userDefined character (len = 200) :: userData end type atcf_record !----------------------------------------------------------------- ! Data structure to hold Best Track records (b-deck) ! ! Note: The length of the b_record dtg field differs from ! dataformats.h (which is 12 digits). We decided at this ! time that none of the Fortran code requires the Best Track ! minutes data. ! - AJS and B Sampson 03/2011 !----------------------------------------------------------------- type b_record sequence character (len = 2) :: basin integer :: cyNum character (len = 10) :: dtg character (len = 4) :: tech integer :: tau real :: lat character (len = 1) :: ns real :: lon character (len = 1) :: ew integer :: Vmax integer :: mslp character (len = 2) :: ty character (len = 10) :: stormName end type b_record !----------------------------------------------------------------- ! Data structure to hold objective aids records (a-deck) ! ! Note: The length of the a_record dtg field differs from ! dataformats.h (which is 12 digits). We decided at this ! time that none of the Fortran code requires the Best ! Track minutes data. ! - AJS and B Sampson 03/2011 !----------------------------------------------------------------- type a_record sequence character (len = 2) :: basin integer :: cyNum character (len = 10) :: dtg integer :: techNum character (len = 4) :: tech integer :: tau real :: lat character (len = 1) :: ns real :: lon character (len = 1) :: ew integer :: Vmax integer :: mslp character (len = 2) :: ty integer :: rad character (len = 3) :: windCode integer, dimension(4) :: radii integer :: radp integer :: rrp integer :: mrd integer :: gusts integer :: eye character (len = 3) :: subRegion integer :: maxSeas character (len = 3) :: initials integer :: dir integer :: speed character (len = 10) :: stormName character (len = 1) :: depth integer :: seas character (len = 3) :: seasCode integer, dimension(4) :: seasRad integer :: genesisNum character (len = 20) :: userDefined character (len = 200) :: userData end type a_record !----------------------------------------------- ! Data structure to hold all objective aid info ! for a single technique and a single dtg !----------------------------------------------- type aid_data sequence integer :: numRcrds type (a_record) , dimension(aidTauMax*aidRadMax) :: aRecord type (atcf_record), dimension(aidTauMax*aidRadMax) :: atcfRcd end type aid_data !----------------------------------------------------------------- ! Data structure to be used for stepping through the aid_data ! records for a single dtg. ! ! Note: The length of the aid_data_dtg dtg field differs from ! dataformats.h (which is 12 digits). We decided at this ! time that none of the Fortran code requires the Best Track ! minutes data. ! - AJS and B Sampson 03/2011 !----------------------------------------------------------------- type aid_data_dtg sequence character (len = 10) :: dtg ! Date-time group integer :: aRcdIdx ! For consistency with ! dataformats.h integer :: firstARcd ! First aRcd for dtg character (len = 120) :: aidsFile ! Aids filename integer :: fileRcdNum ! Used to save file ! position integer :: magic ! Magic number for ! validity of structure end type aid_data_dtg !--------------------------------------------------------------- ! Data structure to hold all objective aid info for a single dtg !--------------------------------------------------------------- type big_aid_data sequence integer :: numRcrds type (a_record) :: aRecord(bigAidMax*aidTauMax*aidRadMax) type (atcf_record) :: atcfRcd(bigAidMax*aidTauMax*aidRadMax) end type big_aid_data !========================== ! Objective aids structures !========================== !---------------------------------------------- ! Information for one tau of objective aid data !---------------------------------------------- type pnt sequence integer (kind = 2) :: v integer (kind = 2) :: h end type pnt type objective_aids_dataPoint sequence logical (kind = 2) :: isValid logical (kind = 2) :: isEmpty integer :: tau real :: latitude logical (kind = 2) :: north real :: longitude logical (kind = 2) :: east type (pnt) :: pos integer (kind = 2) :: wind character (len = 3), dimension(4) :: windCode integer, dimension(4,4) :: radii integer :: dir integer :: speed end type objective_aids_dataPoint !----------------------------- ! A collection of taus where: ! 0 = 12 hours, ! 1 = 24 hours ! 2 = 36 hours, ! 3 = 48 hours, ! 4 = 72 hours, ! . . . !----------------------------- type objective_aids_dataPoints sequence type(objective_aids_dataPoint),dimension(objectiveAidsTaus)::point end type objective_aids_dataPoints !------------------------------------------------------------ ! Structure to contain all the data for one dtg of one aid ! technique. ! Note: Make sure to zero the entire contents before ANY use. !------------------------------------------------------------ type objective_aids_rcrd sequence character (len = 32) :: stormID character (len = 16) :: technique character (len = 10) :: dtg type (objective_aids_dataPoints) :: data end type objective_aids_rcrd !-------------------------------------- ! Info for an objective aid data record !-------------------------------------- type objAid_record sequence character (len = 5) :: techName character (len = 10) :: dtg integer, dimension(objectiveAidsTaus) :: lat integer, dimension(objectiveAidsTaus) :: lon integer, dimension(objectiveAidsTaus) :: Vmax integer, dimension(objectiveAidsTaus) :: mslp character (len = 8) :: stormID character (len = 3) :: initials integer :: dir integer :: speed end type objAid_record !================= ! eProb structures !================= type eData_record sequence character (len = 2) :: basin character (len = 2) :: cyNum character (len = 10) :: dtg character (len = 2) :: probType character (len = 4) :: tech character (len = 3) :: tau character (len = 4) :: latNS character (len = 5) :: lonEW character (len = 3) :: prob character (len = 200) :: remainder end type eData_record !---------------------------------------- ! Individual eProb type record structures !---------------------------------------- !------------------- ! Track related data !------------------- type probTrack_record sequence integer :: rad ! Probability radius, ! 0 - 2000 nm character (len = 2) :: dummy ! Currently unused integer :: dir ! Cross-track direction, ! 0 - 359 deg character (len = 2) :: dummy2 ! Currently unused integer :: rad_cross ! Cross-track radius, ! 0 - 2000 nm integer :: rad_along ! Along-track radius, ! 0 - 2000 nm integer :: bias_cross ! Cross-track bias, ! 0 - 2000 nm integer :: bias_along ! Along-track bias, ! 0 - 2000 nm end type probTrack_record !----------------------- ! Intensity related data !----------------------- type probIntens_record sequence integer :: v ! New bias adjusted wind ! speed, kts character (len = 2) :: dummy ! Currently unused integer :: half_range ! Half of probability range ! (radius), kts, 4 chars character (len = 52) :: comments end type probIntens_record !----------------------------------- ! Rapid intensification related data !----------------------------------- type probRI_record sequence integer :: deltaV ! Intensity change, kts, ! 3 chars integer :: v ! Final intensity , kts, ! 3 chars character (len = 3) :: initials ! Initials, 3 chars end type probRI_record !------------------------------------ ! TC Genesis probability related data !------------------------------------ type probGenesis_record sequence integer :: deltaHours ! time period, ie genesis ! during next 48 hours, ! 4 chars character (len = 3) :: initials ! Initials, 3 chars character (len = 18) :: genOrDis ! "genFcst", "genesis", ! "disFcst" or "dissipate" character (len = 12) :: genDTG ! DTG of genesis or ! dissipated event, ! yyyymmddhhmm character (len = 8) :: stormID ! cyclone ID, if system ! develops into a TC, or ! cyclone ID of dissipated ! TC integer :: min ! minutes, associated with ! DTG in common fields integer :: futureUse ! TBD (genesis event num?) end type probGenesis_record !------------------------------------- ! Wind radii and pressure related data ! (under construction) !------------------------------------- !----------------------------------------------------------------- ! Data structure to hold eProb records (e-deck) !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! Note: The length of the e_record dtg field differs from ! dataformats.h (which is 12 digits). We decided at this ! time that none of the Fortran code requires the Best Track ! minutes data. ! - AJS and B Sampson 03/2011 !----------------------------------------------------------------- type e_record sequence character (len = 2) :: basin integer :: cyNum character (len = 10) :: dtg character (len = 2) :: probType ! TR - track, ! "03" also accepted ! IN - intensity ! RI - rapid ! intensification ! WD - wind radii ! PR - pressure ! GN - TC genesis logical (kind = 2) :: trackProb logical (kind = 2) :: intensProb logical (kind = 2) :: riProb logical (kind = 2) :: windradProb logical (kind = 2) :: pressProb logical (kind = 2) :: genesisProb character (len = 4) :: tech integer :: tau real :: lat character (len = 1) :: ns real :: lon character (len = 1) :: ew integer :: prob ! Probability: 0 - 100% type (probTrack_record) :: track type (probIntens_record) :: intens type (probRI_record) :: ri type (probGenesis_record):: genesis end type e_record !----------------------------------------------------------- ! Data structure to hold all eProb info for a single record, ! can ba a multi-line record. !----------------------------------------------------------- type eProb_data sequence integer :: numRcrds type (e_record), dimension(aidTauMax) :: eRecord end type eProb_data !-------------------------------------------------------- ! Data structure to hold all eProb info for a single dtg. !-------------------------------------------------------- type big_eProb_data sequence integer :: numRcrds type (e_record), dimension(bigAidMax*aidTauMax) :: eRecord end type big_eProb_data !--------------- ! Fix structures !--------------- type fix_record sequence character (len = 2) :: basin character (len = 2) :: cyNum character (len = 12) :: dtg character (len = 3) :: fixFormat character (len = 4) :: fixType character (len = 10) :: ciCode character (len = 1) :: flagged character (len = 5) :: latNS character (len = 6) :: lonEW character (len = 5) :: height character (len = 1) :: positConf character (len = 3) :: v character (len = 1) :: vConf character (len = 4) :: pressure character (len = 1) :: presConf character (len = 4) :: presDeriv character (len = 3) :: rad character (len = 3) :: windCode character (len = 4), dimension(4) :: radii character (len = 1), dimension(4) :: radMod character (len = 1) :: radConf character (len = 3) :: mrd character (len = 3) :: eye character (len = 1) :: subRegion character (len = 5) :: fixSite character (len = 3) :: initials character (len = 200) :: remainder end type fix_record !-------------------------------------- ! Individual fix type record structures !-------------------------------------- !------------ ! Dvorak code !------------ type dvorak sequence integer :: tNum ! T number, ! tenths, 0.0-8.0 or blank integer :: ciNum ! Current Intensity (CI) number, ! tenths, 0.0-8.0 or blank character :: intChg ! Forecast intensity change, ! '+', '-', or ' ' character :: pastChg ! D-developed, S-steady, ! W-weakened integer :: tNumChg ! Amount of tNum change, ! tenths, 0.0-8.0 or blank integer :: lastEvalHrsAgo ! Hours since previous eval, ! 0-96 hrs end type dvorak !---------------------------- ! Subjective Dvorak technique !---------------------------- type dvts_record sequence character (len = 4) :: sensor ! Sensor type - vis, ir, ! microwave, ... integer :: pcn ! deprecated type (dvorak) :: longTerm type (dvorak) :: shortTerm integer :: ci24hr ! CI 24 hour forecast character (len = 6) :: satType ! GMS, DMSP, DMSP45, TRMM, ! NOAA... character (len = 4) :: centerType ! CSC, LLCC, ULCC ... character (len = 1) :: tropical ! 'T' = tropical, ! 'S' = subtropical, ! 'E' = extratropical character (len = 52) :: comments end type dvts_record !--------------------------- ! Objective dvorak technique !--------------------------- type dvto_record sequence character (len = 4) :: sensor ! Sensor type - V, I, M, ! VI, IM, VM, VIM integer :: ciNum integer :: ciConf integer :: tNumAvg ! T num average integer :: tNumAvgTime ! T num averaging time ! period (hrs) character (len = 1) :: tnumAvgDeriv ! L, T, ... integer :: tNumRaw ! T num raw integer :: eyeTemp ! Temperature (eye), C integer :: cloudTemp ! Temperature (cloud ! surrounding eye), C character (len = 4) :: sceneType ! CDO, EEYE ... character (len = 2) :: algorithm ! R9, RP ... character (len = 6) :: satType ! GMS, DMSP, DMSP45, ! TRMM, NOAA... character (len = 1) :: tropical ! 'T' = tropical, ! 'S' = subtropical, ! 'E' = extratropical character (len = 52) :: comments end type dvto_record !---------- ! Microwave !---------- type microwave_record sequence logical (kind = 2) :: rain ! Rain flag integer :: rainRate ! Rain rate - mm/hour character (len = 6) :: algorithm ! FNMOC, NESDIS, RSS ... integer :: wave ! Wave height ! (active micro), 0-99 ft integer :: temp ! (passive mircowave) integer :: slpRaw ! SLP raw, AMSU only integer :: slpRetr ! SLP retrieved, AMSU only integer :: seas ! Max seas, altimeter, ! 0-999 ft character (len = 6) :: satType ! GMS, DMSP, DMSP45, TRMM, ! NOAA... integer :: rad character (len = 4) :: windCode integer , dimension(8) :: radii logical (kind = 2), dimension(8) :: edge ! Edge of pass logical (kind = 2), dimension(8) :: cut ! Cut off by land integer :: radConf character (len = 52) :: comments end type microwave_record !------ ! Radar !------ type radar_record sequence character (len = 1) :: rdrType ! 'L' = land, ! 'S' = ship, ! 'A' = aircraft, ! 'T' = satellite logical (kind = 2) :: radObCode logical (kind = 2) :: plainLanguage logical (kind = 2) :: doppler character (len = 10) :: radOb ! radOb code - ! ASWartddff character (len = 2) :: eyeShape ! "CI" = circular, ! "EL" = elliptic, ! "CO" = concentric integer :: eyeWallOb ! Percent of eye wall ! observed, 99 = 100% integer :: spiralOv ! Spiral overlay - deg real :: lat ! Radar site position character (len = 1) :: ns real :: lon character (len = 1) :: ew integer :: VmaxIn ! Inbound max wind, ! 0-300 kts integer :: azimuthIn ! degrees, 1-360 integer :: rangeIn ! nautical miles integer :: elevIn ! feet integer :: VmaxOut ! Outbound max wind, ! 0-300 kts integer :: azimuthOut ! degrees, 1-360 integer :: rangeOut ! nautical miles integer :: elevOut ! feet integer :: cloudHeight ! Max cloud height, ! 0 - 70,000 ft real :: rainAccum ! Rain accumulation, ! hundreths of inches integer :: rainAcTimeInt ! Rain accumulation time ! interval, hours real :: rainLat ! Rain accumulation ! position character (len = 1) :: rainNS real :: rainLon character (len = 1) :: rainEW character (len = 52) :: comments end type radar_record !--------- ! Aircraft !--------- type aircraft_record sequence integer (kind = 2) :: flightLevelFT ! Flight lvl ! 100s feet integer (kind = 2) :: flightLevelMB ! Flight lvl ! millibars integer (kind = 2) :: minHeight ! meters integer (kind = 2) :: maxSurfaceWind ! 0-300 kts integer (kind = 2) :: maxSurfaceWindBearing ! 0-360 deg integer (kind = 2) :: maxSurfaceWindRange ! 0-999 nmi integer (kind = 2) :: maxFlightLevelWindDir ! 0-360 deg integer (kind = 2) :: maxFlightLevelWindInt ! 0-999 kts integer (kind = 2) :: maxFlightLevelWindBearing ! 0-360 deg integer (kind = 2) :: maxFlightLevelWindRange ! 0-999 nmi integer (kind = 2) :: minSeaLevelPressure ! 0-9999 mb integer (kind = 2) :: eyeTempOutside ! 0-99 deg C integer (kind = 2) :: eyeTempInside ! 0-99 deg C integer (kind = 2) :: dewPoint ! 0-99 deg C integer (kind = 2) :: seaSurface ! 0-99 deg integer (kind = 2) :: wallCloudThickness ! 0-99 nmi integer (kind = 2) :: eyeShape ! 0 = none, ! 1 = CI ! circular, ! 2 = EL ! elliptic, ! 3 = CO ! concentric integer (kind = 2) :: eyeOrientation ! 0-360 deg integer (kind = 2) :: diameterLongAxis ! 0-99 nmi ! only if ! eye shape ! elliptical integer (kind = 2) :: diameterShortAxis ! 0-99 nmi ! only if ! eye shape ! elliptical real :: navigationalAccuracy ! 0-99.9 ! tenths of ! nmi real :: navigationalMeteorological ! 0-99.9 ! tenths of ! nmi integer (kind = 2) :: missionNumber ! 0-99 character (len = 52) :: comments end type aircraft_record !---------- ! Dropsonde !---------- type dropsonde_record sequence character (len = 10) :: sondeEnv ! Sonde environment - ! EYEWALL, EYE, RAINBAND, ! MXWNDBND, SYNOPTIC integer :: height150 ! Midpoint 150 m height integer :: Vspd150 ! Speed of mean wind over ! lowest 150 m integer :: Vspd500 ! Speed of mean wind from ! 0-500 m character (len = 52) :: comments end type dropsonde_record !--------- ! Analysis !--------- type analysis_record sequence character (len = 3) :: initials ! Analyst's initials character (len = 12) :: startDTG ! YYYYMMDDHHMM character (len = 12) :: endDTG ! YYYYMMDDHHMM integer :: DistanceToNearestData ! 0-999 nm integer :: SST ! Celsius character (len = 24) :: obSources ! Observation sources character (len = 52) :: comments end type analysis_record !--------------------- ! Fix record structure !--------------------- type f_record sequence character (len = 2) :: basin integer :: cyNum character (len = 12) :: dtg ! YYYYMMDDHHMM integer :: fixFormat ! 10 = subjective dvorak ! 20 = objective dvorak ! 30 = microwave ! 40 = radar ! 50 = aircraft ! 60 = dropsonde ! 70 = analysis character (len = 4) :: fixType*4 logical (kind = 2) :: centerFix logical (kind = 2) :: intensityFix logical (kind = 2) :: radiiFix logical (kind = 2) :: pressureFix character (len = 1) :: flagged ! F = flagged fix real :: lat character (len = 1) :: ns real :: lon character (len = 1) :: ew integer :: height integer :: positConf integer :: v integer :: vConf integer :: pressure integer :: presConf character (len = 4) :: presDeriv integer :: rad character (len = 4) :: windCode integer, dimension(4) :: radii logical (kind = 2), dimension(4) :: edge logical (kind = 2), dimension(4) :: cut integer :: radConf integer :: mrd ! Radius of max winds integer :: eye ! Eye diameter character (len = 1) :: subRegion character (len = 5) :: fixSite character (len = 3) :: initials type (dvts_record) :: dvts type (dvto_record) :: dvto type (microwave_record) :: micro type (radar_record) :: radar type (aircraft_record) :: air type (dropsonde_record) :: drop type (analysis_record) :: anal end type f_record !----------------------------------------------------------------- ! Data structure to hold all of the fix info for a single fix, ! including all the records required for the 34, 50, 64 & 100 kt ! significant wind radii. !----------------------------------------------------------------- type fix_data sequence character (len = 8) :: stormID integer :: file_pos ! Compatibile w dataformats.h integer :: numRcrds type (f_record), dimension(aidRadMax) :: fRecord end type fix_data