AUSTAL (modified)

TalPrm.h

/*===================================================================== TalPrm.h
 *
 * Definition of parameters for AUSTAL
 * ===================================
 *
 * Copyright (C) Umweltbundesamt, Dessau-Roßlau, Germany, 2002-2024
 * Copyright (C) Janicke Consulting, 88662 Überlingen, Germany, 2002-2024
 * Email: info@austal.de
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of
 * the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 * last change:  2023-07-17 uj
 *
 *============================================================================*/

#ifndef  TALPRM_INCLUDE
#define  TALPRM_INCLUDE

#ifndef   IBJTM_INCLUDE
  #include "IBJtm.h"
#endif
#ifndef   IBJARY_INCLUDE
  #include "IBJary.h"
#endif
#ifndef   TALIO1_INCLUDE
  #include "TalIo1.h"
#endif


#define FLG_ECHO      0x00000001L
#define FLG_CHECK     0x00000002L
#define FLG_VERB      0x00000004L
#define FLG_DISP      0x00000008L
#define FLG_QUIET     0x00000010L
#define FLG_MNT       0x00000020L // 2001-04-26 uj
#define FLG_MAXIMA    0x00000040L // 2001-04-26 uj
#define FLG_LIBRARY   0x00000080L //-2002-01-05 lj
#define FLG_PTLTAB    0x00000100L
#define FLG_RESULT    0x00000200L
#define FLG_WRTMOD    0x00000400L
#define FLG_SCAT      0x00000800L
#define FLG_CHEM      0x00001000L
//#define FLG_GEOGK     0x00002000L
#define FLG_WETDRIFT  0x00004000L //-2023-07-17
#define FLG_NOBASE    0x00008000L //-2001-03-24 lj
#define FLG_GAMMA     0x00010000L
#define FLG_2DVDP     0x00020000L
#define FLG_WRITESFC  0x00040000L //-2012-10-30
#define FLG_READSFC   0x00080000L //-2012-10-30
#define FLG_ONLYADVEC 0x00100000L //-2002-01-05 lj
#define FLG_NOPREDICT 0x00200000L
#define FLG_EXACTTAU  0x00400000L
#define FLG_TRACING   0x00800000L
#define FLG_MONITOR   0x01000000L
#define FLG_RNDSET    0x02000000L
#define FLG_ODOR      0x04000000L
#define FLG_ODMOD     0x08000000L
#define FLG_PLURIS    0x10000000L //-2018-10-04
#define FLG_BESMAX    0x20000000L //-2024-01-17

#define PRM_VARCHM    0x00000001
#define PRM_VAREMS    0x00000002
#define PRM_VARASL    0x00000004
#define PRM_VARSRC    0x00000008
#define PRM_VARPRM    0x00000080
#define PRM_DIRECT    0x00000100
#define PRM_CLOCK     0x00000200
#define PRM_STOP      0x00001000
#define PRM_BREAK     0x00002000
#define PRM_CONTINUE  0x00004000
#define PRM_USER      0x00008000
#define PRM_ERROR     0x80000000

#define  MI  (*PMI)

typedef struct {
   char cltime[12];
   char cldate[12];
   char label[256];                               //-2004-11-09
   char titel[256];
   char dpath[256];
   char defname[20];
   char input[80];
   char output[80];
   char asllist[40];
   char srglist[40];
   char depo[80], depobase[256], wash[80], washbase[256];
   int numasl, maxcmp, sumcmp, numsrc, numsrg, numgrp;
   int numshuf, asl, net;
   long flags, vlevel, dlevel, special, status, seed, count;
   float gamma[5];
   float khmin, kvmin, prcp, hmax, step;
   TMBROKEN rbrk;
   TMDATE rdat;
   long cycind, cycle, average, wait;
   long start, end;
   long mett1, mett2, ztrt1, ztrt2, simt1, simt2, dost1, dost2;
   float wlkext;
   long  wlkdiv;
   float timing, lastrfac, usedrfac;
   long cli, cla, clb, clc, tmi, tma;
   float emisfac, quality;
   int iset, shn, inext, inextp;
   long shy, shtable[100];
   float threshold;
   } PRMINF;

typedef struct {
   char name[40], unit[20];
   int specident, specindex;
   float gmin, vsed, vdep, fwsh, rfak, rexp, mptl, refc, refd, wdep;
   float vred, hred;
   int aslcmp;
   } CMPREC;

typedef struct {
   char name[40];
   char unit[20];
   int specident, specindex;
   long id;
   float vsed, gmin, rate;
   int offcmp, numcmp;
   ARYDSC *pa;
   float admean, slogad, density;
   int nadclass;
   float adlimits[20], addistri[20];
   float vred, hred;
   } ASLREC;

typedef struct {
   char name[40];
   float fq;
   } SRGREC;

/*
typedef struct {
   char name[40];
   float x, y, r, h, t, l, w, d, qq, vq, dq, oq, pq, aq, cq, fq, gq;
   float x1, y1, h1, x2, y2, h2, ts, sh, sv, sl, fr, rhy, lwc, tmp,
     iq, si, co;                                                  //-2015-12-01
   long idgrd, idgrp;
   int ipoly1, ipoly2;
   float xmin, xmax, ymin, ymax, length;
   } SRCREC;
 */
   
typedef struct {
   char name[40];
   /////////////////////////////////////////////////////////////////////////////
   // the order of these input parameters must be identical to 
   // SrcNames/StdSrcDat in TalPrm.c !
   float x, y, h, aq, bq, cq, wq;
   float x1, y1, h1, x2, y2, h2;
   float fq, gq, sh, sl, sv, fr;
   float dq, vq, tmp;
   float wld, rhy, vwc, lwc;
   float ts, iq, rt, rf;                                          //-2024-01-17
   /////////////////////////////////////////////////////////////////////////////
   float si, co;
   long idgrd, idgrp;
   int ipoly1, ipoly2;
   float xmin, xmax, ymin, ymax, length;
   float trise, hrise;
   long valid;
   } SRCREC;

typedef struct {
  float xp, yp, hp;
} SRPREC;

typedef struct {
   float x, y, r, h, t, l, w, d, qq, vq, dq, oq, pq, aq, cq, fq, gq, ts, sh, sv, sl, fr;
   } AFUREC;

extern PRMINF *PMI;
extern ARYDSC *PrmPasl, *PrmPcmp, *PrmPsrc, *PrmPems, *PrmPchm;
extern ARYDSC *PrmPsrg, *PrmPemg, *PrmPsrp;
extern VARTAB *PrmPvpp;
extern int myid; //bp 

/*=========================== PROTOTYPES LSTPRM ============================*/

char *PrmHeader(                /* the header (global storage)  */
  long id,                      /* identification               */
  long *pt1,                    /* start of the validity time   */
  long *pt2 )                   /* end of validity time         */
  ;
char *CmpHeader(                /* the header (global storage)  */
  long id,                      /* identification               */
  long *pt1,                    /* start of the validity time   */
  long *pt2 )                   /* end of validity time         */
  ;
long PrmInit(           /* initialize server    */
long flags,             /* action flags         */
char *istr )            /* server options       */
  ;
long PrmServer(
char *ss )
  ;
/*==========================================================================*/
#endif