$ $ THIS ALTER IS CONFIDENTIAL AND A TRADE SECRET OF THE $ MSC.Software CORP. THE RECEIPT OR POSSESSION OF $ THIS ALTER DOES NOT CONVEY ANY RIGHTS TO REPRODUCE OR $ DISCLOSE ITS CONTENTS, OR TO MANUFACTURE, USE, OR SELL $ ANYTHING HEREIN, IN WHOLE OR IN PART, WITHOUT THE $ SPECIFIC WRITTEN CONSENT OF THE MSC.Software CORPORATION. $ $ echooff $ $ $ updated 1/21/05 llp works for V2004 and V2005 $ 1) change logic for calc of ASETDISP $ -use SOLTYP/DRMM instead of APP1/DDRMM in IF statement $ 2) use DSAR to separate transient disp/velo/acce instead of matgen/partn $ 3) KAA/MAA will already include modal, so skip references to KLAA/MLAA $ i.e. was (not necessary for V2001+) $ ADD KAA,KLAA/KAABNDRY $ ADD PHYSICALS + MODALS $ MPYAD KAABNDRY,DISPLS,/KD $ KD = KAABNDRY * DISPLS $ is $ MPYAD KAA,DISPLS,/KD $ KD = KAABNDRY * DISPLS $ $ updated on 7-22-98 to correct csr 32731 $ $ sebloada.v69 - updated for v69 -- jml - 9-25-96 $ $ $ updated for system built on on 3-14-95 VERSION 68.2 $ $ filename - sebloada.v68 $ compile semtran alter 1 $ putsys(0,192) $ $ compile sedtran $ alter 1 $ putsys(0,192) $ $ compile semfreq $ alter 1 $ putsys(0,192) $ $ compile sedfreq $ alter 1 $ putsys(0,192) $ $ COMPILE sekr $ $alter 109 $ $matprn kaa// $ $ COMPILE SUPER3 $ $ ------ SUPERELEMENT BOUNDARY LOADS ALTER FOR DYNAMIC ANALYSES -------- $ $ MODIFICATIONS SINCE MSC WORLD USER'S CONFERENCE MAY 92: $ $ 1) VECPLOT MODULE ADDED TO GIVE SUPERELEMENT BOUNDARY LOAD RESULTANTS $ FOR EACH TIME STEP/OUTPUT FREQUENCY. USER MAY SPECIFY ORIGIN $ POINT VIA PARAM,GRDPNT. OUTPUT ID FROM VECPLOT STARTS WITH THE $ SUPERELEMENT ID AND INCREASES BY 1 FOR EACH TIME STEP/FREQUENCY. $ THERE ARE NO OPTIONS FOR MAGNITUDE/PHASE IN FREQUENCY RESPONSE. $ $ 2) XYTRAN MODULE ADDED TO CREATE TABLED1 CARDS FOR OLOADS. USER $ INCLUDES XPUNCH OLOAD /GRID_ID(COMPONENT) REQUESTS IN THE $ OUTPUT(XYOUT) PORTION OF THE CASE CONTROL. $ $ ---------------------------------------------------------------------- $ ALTER WILL CALCULATE INTERFACE BOUNDARY LOADS FOR SPECIFIED $ SUPERELEMENTS BASED ON THE FOLLOWING EQUATION: $ $ {F} = [MAA]*{ACCEL} + [BAA]*{VEL} + [KAA]*{DISP} $ $ WHERE ACCEL, VEL, AND DISP ARE THE SUPERELEMENT A-SET (BOUNDARY) $ RESPONSES AS CALCULATED IN A LINEAR TRANSIENT OR FREQUENCY RESPONSE $ SOLUTION. {F} WILL BE A FORCE TIME-HISTORY OR FREQUENCY RESPONSE $ OF THE INTERFACE LOADS APPLIED TO THE UPSTREAM SUPERELEMENT FROM $ THE DOWNSTREAM SUPERELEMENT. OUTPUT CAN BE PRINTED AND/OR PUNCHED $ SORT-2 OLOAD-STYLE OUTPUT, OR DMI/DMIG CARDS CAN BE PUT ON THE $ PUNCH FILE. $ $ USER REQUIREMENTS: $ 1) INCLUDE AND COMPILE THIS ALTER AGAINST SUBDMAP SUPER3, $ VERSION 67 OF MSC/NASTRAN. NOTE THAT A SEPARATE SUBDMAP $ NAMED TFVECTOR IS INCLUDED IN THIS ALTER PACKAGE. $ 2) PARAM, SEBFORCE MUST APPEAR IN EACH SUPERELEMENT SUBCASE WHERE $ BOUNDARY FORCES ARE TO BE CALCULATED. SET PARAM, SEBFORCE TO 1 $ FOR PRINTED AND/OR PUNCHED OUTPUT (SEE ITEM 3) ONLY, TO 2 FOR $ ADDITIONAL OUTPUT IN DMIG FORMAT IN THE PUNCH FILE, AND TO 3 $ FOR PUNCHED DMI CARDS OF THE TIME STEPS/FREQUENCY LIST (SEE $ ITEM 4). $ 3) FOR PRINTED AND/OR PUNCHED OUTPUT, USE OLOAD CASE CONTROL $ COMMANDS (E.G. OLOAD(PRINT,PUNCH)=SET_NO). USING A SET IS $ HIGHLY RECOMMENDED TO AVOID SUPERFLUOUS OUTPUT. $ 4) DMIG OUTPUT CONTAIN LOADINGS AT GRIDS/DOFS, BUT NO $ LISTING OF THE TIME STEPS/FREQUENCIES OF THESE LOADS. IF $ SEBFORCE IS SET TO 3, THEN A DMI MATRIX OF THE TIME STEPS/ $ OUTPUT FREQUENCIES WILL BE PUNCHED AS WELL. THIS ONLY NEEDS $ TO BE DONE ONCE PER RUN. $ 5) TO HAVE TABLED1 ENTRIES PUT INTO THE PUNCH FILE, INCLUDE $ XYPUNCH OLOAD /GRID_ID(COMPONENT) REQUESTS IN THE OUTPUT(XYPLOT) $ SECTION OF THE CASE CONTROL FOR THE DESIRED GRIDS/DOFS. $ (NOTE, UNLESS LINE 171 (XYTRAN MODULE) IN SUBDMAP SEDRCVR IS $ DELETED, A STANDARD XYPUNCH OF THE REQUESTED OUTPUT QUANTITY $ WILL SHOW UP ALSO. SINCE UPSTREAM LOADS ARE NOT SUPPORTED, THE $ STANDARD XYPUNCH WILL ALL BE ZERO). FREQUENCY RESPONSE TABLES $ WILL BE IN REAL/IMAGINARY OR MAGNITUDE/PHASE DEPENDING ON THE $ OLOAD REQUEST - REMEMBER TO INCLUDE BOTH RM AND IP REQUESTS FOR $ DOFS IN A FREQUENCY RESPONSE ANALYSIS. $ ---------------------------------------------------------------------- $ $ALTER 213 $208 $ AFTER CALL TO SEDRCVR (LINE 136 FOR V66A/B, 175 FOR 67.5) alter 'call.*sedrcvr' $ $ SKIP OVER THIS IF RESIDUAL, OR PARAM, SEBFORCE IS NOT SET TYPE,PARM,,I,Y,(SEBFORCE=-1) $ $ IF DATABLOCK CASES WITH SEID > 0 AND PEID=0 CAN BE FOUND, THEN USE IT $ TO UPDATE PVT - INDICATES CURRENT SUPERELEMENT IS AN EXTERNAL. $ OTHERWISE CASES WITH PEID=SEID FROM DBLOCATED DB WOULD PREVAIL. DBVIEW CASESUB=CASES (WHERE SEID=SEID AND PEID=0 AND WILDCARD=TRUE) PVT PVTS,CASESUB/PVTEMP/ $ $ prtparm //0/'sebforce' $ prtparm //0/'seid' $ $ IF ((SEBFORCE <= 0) OR (SEID <= 0)) JUMP THEEND $ $ $llp2004TYPE DB,MAA,BAA,KAA,KLAA,MLAA $ NECESSARY PERMANENT DATABLOCKS $llp2004 TYPE PARM,NDDL,I,Y,DDRMM $ NECESSARY NDDL PARAMETER $ $ LOCAL PARAMS TYPE,PARM,,I,N,NUMCOLZ,UCHEK,KCHEK,MCHEK,BCHEK,ASIZE,GSIZE,TFCHEK TYPE,PARM,,RS,N,REALSCAL,IMAGSCAL TYPE,PARM,,CS,N,SCALER $ $ MESSAGE //' ' MESSAGE //' ' MESSAGE //' +----------------------------------+' MESSAGE //' | BOUNDARY LOAD CALCULATIONS FOR #' MESSAGE //' | SUPERELEMENT '/SEID/ ' #' MESSAGE //' +-=================================#' MESSAGE //' ' MESSAGE //' ' $ $ MAKE SURE S.E. BOUNDARY MOTION DATABLOCK IS THERE $ PARAML ULS//'PRESENCE'////S,N,UCHEK $ IF (UCHEK = -1) THEN $ BOUNDARY MOTION DATABLOCK NOT FOUND MESSAGE //'*** SYSTEM SEMI-FATAL MESSAGE: BOUNDARY DISPLACEMENT '/ 'DATABLOCK ULS FOR S.E.'/SEID/' NOT FOUND' $ MESSAGE //' SUPERELEMENT BOUNDARY LOADS ROUTINE CANNOT CONTINUE' $ JUMP THEEND $ PUNT REST OF ALTER ENDIF $ CONTINUE IF BOUNDARY MOTION DATABLOCK FOUND $ $ ---------------------------------- OBTAIN A-SET BOUNDARY MOTION MATRIX $ FOR DIRECT APPROACHES, OR IF DRMM IS TRUE, THEN DATABLOCK ULS $ WILL BE THE BOUNDARY SOLUTION MATRIX. FOR MODAL APPROACHES WITH THE $ DEFAULT MATRIX METHOD OF DATA RECOVERY, ULS IS JUST THE MODE SHAPE $ MATRIX FOR THE BOUNDARY DOF. IN THAT CASE, IT MUST BE MULTIPLIED BY $ THE UH MODAL RESPONSE DATABLOCK. (FOR V66A/B, ULS IS NAMED ULVS, AND $ UH IS NAMED UHVF). WITH THE MATRIX METHOD THE TIME/FREQUENCY OUTPUT $ LIST DATABLOCK FOR SDR2 IS NAMED OL1 (OLBM FOR V66A/B), OTHERWISE $ USE DATABLOCK OLB2 (OLB1 FOR V66A/B) $ $llp2004IF ((APP1 = 'MMREIG') AND (DDRMM >= 0)) THEN $ MATRIX METHOD USED IF ((SOLTYP='MODAL') AND not(DRMM) ) THEN $ MATRIX METHOD USED PARAML UH1//'PRESENCE'////S,N,UCHEK $ IF(UCHEK = -1) THEN $ MESSAGE //'*** SYSTEM SEMI-FATAL MESSAGE: MODAL RESPONSE '/ 'DATABLOCK UH1 FOR S.E.'/SEID/' NOT FOUND ' $ MESSAGE //' SUPERELEMENT BOUNDARY LOADS ROUTINE CANNOT CONTINUE' $ JUMP THEEND $ PUNT ENDIF $ MPYAD ULS,UH1,/ASETDISP $ MODAL DISP * MODAL RESPONSE EQUIVX OL1r/OUTPLIST/ALWAYS $ OUTPUT LIST ELSE $ OTHERWISE, DRMM=TRUE OR DIRECT METHOD USED, SO EQUIVX ULS/ASETDISP/ALWAYS $ EQUIVX ol1s/OUTPLIST/ALWAYS $ OUTPUT LIST ENDIF $ $ $ MATRIX ASETDISP CONTAINS THE BOUNDARY MOTION FOR THE SUPERELEMENT. $ IF THIS IS A TRANSIENT RESPONSE, THAT WILL BE TRIPLETS OF DISP/ $ VELO/ACCE COLUMN VECTORS FOR EACH TIME STEP. IF A FREQUENCY RESPONSE $ RUN, THEN EACH COLUMN CORRESPONDS TO AN OUTPUT FREQUENCY DISPLACEMENT $ SET. TABLE OUTPLIST IS THE TIME STEP/OUTPUT FREQUENCY LIST FOR SDR2. $ PARAML ASETDISP//'TRAILER'/2/S,N,ASIZE $ NUMBER OF ROWS (BOUNDARY DOF) PARAML ASETDISP//'TRAILER'/1/S,N,NUMCOLZ $ NUMBER OF COLS IN ASETDISP $ $ ---------------------------------- VERIFY KAA/BAA/MAA DATABLOCKS EXIST PARAML KAA//'PRESENCE'////S,N,KCHEK $ PARAML BAA//'PRESENCE'////S,N,BCHEK $ PARAML MAA//'PRESENCE'////S,N,MCHEK $ $ IF (KCHEK = -1) THEN $ STIFFNESS MATRIX NOT PRESENT $ MUST AT LEAST HAVE KAA MESSAGE //' *** USER INFORMATION MESSAGE - BOUNDARY '/ ' STIFFNESS MATRIX KAA FOR S.E. '/SEID/' NOT FOUND' $ MESSAGE //' *** USER SEMI-FATAL MESSAGE - BECAUSE KAA WAS NOT'/ 'FOUND, '/ ' BOUNDARY LOADS FOR SUPERELEMENT '/SEID/ ' WILL NOT BE PROCESSED' $ JUMP THEEND $ ENDIF $ AT LEAST KAA WAS FOUND $ IF (BCHEK = -1) THEN $ DAMPING BOUNDARY MATRIX NOT PRESENT MESSAGE //' *** USER INFORMATION MESSAGE- BOUNDARY '/ ' DAMPING MATRIX BAA FOR S.E. '/SEID/' NOT FOUND' $ MESSAGE //' DAMPING TERMS WILL NOT BE INCLUDED IN THE'/ 'BOUNDARY FORCE CALCULATIONS' $ ENDIF $ $ IF (MCHEK = -1) THEN $ MASS BOUNDARY MATRIX NOT PRESENT MESSAGE //' *** USER INFORMATION MESSAGE- BOUNDARY '/ ' MASS MATRIX MAA FOR S.E. '/SEID/' NOT FOUND' $ MESSAGE //' INERTIAL TERMS WILL NOT BE INCLUDED IN THE'/ 'BOUNDARY FORCE CALCULATIONS' $ ENDIF $ $ IF (APP = 'TRANRESP') THEN $ $ ----------------------------------- PROCESSING FOR TRANSIENT ANALYSES $llp2004 replace matgen/partn with DSAR DSAR ASETDISP,,,/DISPLS,VELOCS,ACCELS,,/-1 $ $ $ DISPLACEMENTS: $ MPYAD KAABNDRY,DISPLS,/KD $ KD = KAABNDRY * DISPLS MPYAD KAA,DISPLS,/KD $ KD = KAABNDRY * DISPLS $ $ VELOCITIES: IF(BCHEK <> -1) THEN $ MPYAD BAA,VELOCS,/BV $ BV = BAA * VELOCS ENDIF $ $ $ ACCELERATIONS: IF(MCHEK <> -1) THEN $ MPYAD MAA,ACCELS,/MA $ MA = MAABNDRY * ACCELS ENDIF $ $ ELSE IF (APP = 'FREQRESP') THEN $ $ $ --------------------------- PROCESSING FOR FREQUENCY RESPONSE ANALYSES $ MATRIX ASETDISP CONTAINS DISPLACEMENTS (ONLY) FOR BOUNDARY. THE $ MAGNITUDE OF THE VELOCITY IS RELATED TO THE DISPLACEMENT MAGNITUDE BY $ THE RADIAN FREQUENCY, OMEGA, BUT LEADS THE DISPLACEMENTS BY 90 DEGREES. $ SIMILARLY THE ACCELERATIONS ARE MINUS OMEGA-SQUARED TIMES THE $ DISPLACEMENTS (AND HENCE LEAD BY 180 DEGREES). $ $ IN TERMS OF REAL/IMAG NOTATION: $ $ IF D = DISPLACEMENTS = ( D(REAL), D(IMAG)) $ V = VELOCITIES = ( V(REAL), V(IMAG)) $ = W*(-D(IMAG), D(REAL)) (W=FREQUENCY/RADS) $ A = ACCELERATIONS = ( A(REAL), A(IMAG)) $ = -W*W*( D(REAL), D(IMAG)) $ $ THE OMEGA PORTION OF THE VELOCITY/ACCELERATION IS TAKEN CARE OF BY $ POST-MULTIPLYING THE (MODIFIED) DISPLACEMENT MATRIX BY A DIAGONAL $ MATRIX OF FREQUENCIES OBTAINED BY THE CALL TO SUBDMAP TFVECTOR. THE $ MODIFIED DISPLACEMENT MATRIX (MODISPLS) WITH REAL/IMAG TERMS $ SWITCHED, NEEDED FOR THE VELOCITY MATRIX, IS OBTAINED BY $ NORMALIZING THE DISPLACEMENT MATRIX ASETDISP, AND THEN SCALING BY $ THE REVERSE OF THE NORMALIZING FACTORS, WITH THE APPROPRIATE SIGNAGE. $ THE ACCELERATION MATRIX IS SIMPLY MINUS THE UNMODIFIED ASET $ DISPLACEMENTS TIMES OMEGA SQUARED. $ $ FOR DISPLACEMENTS: EQUIVX ASETDISP/DISPLS/ALWAYS $ ALWAYS MPYAD KAA,DISPLS,/KD $ KD = KAABNDRY * DISPLS $ CALL TFVECTOR OUTPLIST/TFVECT/'RADIAN ' $ GET FREQ LIST VECTOR MATMOD TFVECT,,,,,/OMEGS,/28 $ EXPAND TO DIAGONAL $ $ FOR VELOCITIES: IF (BCHEK <> -1) THEN $ MATMOD ASETDISP,,,,,/NORMDISP,/8//// S,N,REALSCAL/S,N,IMAGSCAL $ NORMALIZE IMAGSCAL = -IMAGSCAL $ MODIFY SIGN SCALER = CMPLX(IMAGSCAL,REALSCAL) $ REVERSE REAL/IMAG ADD NORMDISP,/MODISPLS/SCALER $ RESCALE, R/I SWITCHED MPYAD MODISPLS,OMEGS,/VELOCS/0 $ TIMES OMEGA(S) MPYAD BAA,VELOCS,/BV $ BV = BAA * VELOCS ENDIF $ $ $ FOR ACCELERATIONS: IF (MCHEK <> -1) THEN $ DIAGONAL OMEGS/OMEGSQR/'SQUARE'/2. $ W(I)**2 MPYAD ASETDISP,OMEGSQR,/ACCELS/0/-1 $ A(I)=-(W(I)**2)*D(I) MPYAD MAA,ACCELS,/MA $ MA = MAABNDRY * ACCELS ENDIF $ $ ENDIF $ TRANS/FREQ RESP STIFFNESS/DAMPING/INERTIAL MATRICES FORMED $ $ ------------------------------------------------------ LOAD SUMMATION $ TOTAL BOUNDARY LOADS IS SUM OF: KD (STIFFNESS FORCES), $ BV (DAMPING FORCES), AND $ MA (INERTIAL FORCES) $ BNDRY4A = (KAA*DISPLS) + (BAA*VELOCS) + (MAA*ACCELS) $ = KD + BV + MA ADD5 MA,BV,KD,,/BNDRY4A $ A-SET SIZED BOUNDARY FORCES $ $ $ ---------------------------------------------------- OUTPUT OPERATIONS $ EXPAND TO G-SET SIZE FOR SDR2, DMIG OPERATIONS $ UMERGE USET,BNDRY4A,/BNDRY4G/'G'/'A'/'O' $ SDR2 CASEDR,CSTMS,MPTS,DIT,EQEXINS,,ETT,OUTPLIST,BGPDT, BNDRY4G,,,EST ,XYCDBDR,,,,,,,/ OBND4G1,,,,,/APP/S,N,NOSORT2/NOCOMPS $ SDR3 OBND4G1,,,,,/OBND4G2,,,,,/ $ OFP OBND4G2// $ MESSAGE //' ' MESSAGE //' ' MESSAGE //' THE ABOVE TABLE, LABELLED AS OLOADS, ARE REALLY THE '/ 'SUPERELEMENT BOUNDARY FORCES' $ MESSAGE //' AS CALCULATED BY THE BOUNDARY FORCE DMAP ALTER ' $ MESSAGE //' ' $ $ CALCULATE RESULTANT VECTORS FOR EACH OUTPUT TIME STEP/FREQUENCY. $ THE IDENTIFIER ON THE LEFT SIDE OF THE RESULTANT WILL START AT $ THE SUPERELEMENT ID AND INCREASE BY 1 FOR EACH OUTPUT ITEM. $ TABLE IS IDENTIFIED BY "BOUNDARY RESULTANT" LABEL $ VECPLOT BNDRY4G,BGPDTS,EQEXINS,CSTMS,CASEDR,,,/TMPOUT/V,Y,GRDPNT/ -1/1/'BOUNDARY' $ MESSAGE //' ' MESSAGE //' THE ABOVE BOUNDARY RESULTANT TABLE IS THE FORCE/MOMENT'/ ' RESULTANT VECTOR FOR EACH TIME STEP/OUTPUT FREQUENCY' MESSAGE //' TAKEN ABOUT THE REFERENCE POINT SPECIFIED ON PARAM,'/ ' GRDPNT = '/GRDPNT $ MESSAGE //' ' $ $ INCLUDE XYTRAN TO CREATE TABLED1 CARDS OF THE BOUNDARY LOADS. USER $ MUST INCLUDE APPROPRIATE REQUESTS IN OUTPUT(PLOT) SECTION FOR ALL $ DOF CARDS ARE TO BE PUNCHED FOR. $ OUTPUT(XYOUT) $ XYPUNCH OLOAD /G1(T1),G1(T2),G1(T3),G2(R3),G3(R1), ETC... $ XYTRAN XYCDBdr,OBND4G2,,,,/XYPLTT/APP/'PSET'/S,N,PFILE/S,N,CARDNO/ S,N,NOXYP/1 $ $ IF (SEBFORCE = 3) THEN $ CREATE AND MATPCH MATRIX OF TIMES/FREQS PARAML TFVECT//'PRESENCE'////S,N,TFCHEK $ CREATED YET? IF(TFCHEK = -1) CALL TFVECTOR OUTPLIST/TFVECT/' ' $ MATPCH TFVECT// $ MESSAGE //'*** USER INFORMATION MESSAGE: TIME STEP/FREQUENCY LIST'/ ' HAS BEEN PUT IN THE PUNCH FILE' $ MESSAGE //' IN DMI FORMAT - SEE MATRIX LABELLED TFVECT' $ SEBFORCE = SEBFORCE - 1 ENDIF $ $ IF (SEBFORCE = 2) THEN $ PUNCH DMIG CARDS AS WELL $ DMIG CARDS CONTAIN ONLY THE FORCES AT THE GRIDS, AND DO NOT CONTAIN $ ANY OF THE OUTPUT TIMES. $ PARAML BNDRY4G//'TRAILER'/2/S,N,GSIZE $ MATGEN EQEXINS/INTEXT/9/0/GSIZE $ MPYAD INTEXT,BNDRY4G,/BNDRY4GX/1 $ MATMOD BNDRY4GX,EQEXINS,,,,/MATPOOL,/16/1//////////'BNDRY4G' $ MESSAGE //' ' MESSAGE //' *** USER INFORMATION MESSAGE: BOUNDARY FORCES'/ 'FOR SUPERELEMENT '/SEID/' HAVE BEEN PUT IN THE ' $ MESSAGE //' PUNCH FILE IN DMIG FORMAT - SEE MATRIX LABELLED '/ 'BNDRY4G' $ MESSAGE //' ' $ ENDIF $ $ MESSAGE //' ' MESSAGE //' ' MESSAGE //' +-----------------------------------+' MESSAGE //' | END OF BOUNDARY LOAD CALCULATIONS #' MESSAGE //' | FOR SUPERELEMENT '/SEID/ ' #' MESSAGE //' +-==================================#' MESSAGE //' ' MESSAGE //' ' $ LABEL THEEND $ SKIP TO HERE IF NO PROCESSING OR ERRORS $ $ ----------------------------------------------------- SUBDMAP TFVECTOR COMPILE TFVECTOR $ $ SUBDMAP TFVECTOR OUTPLIST/TFVECT/FREQRADN $ $ THIS SUBDMAP WILL BUILD A VECTOR OF OUTPUT TIME STEPS FOR A $ $ TRANSIENT SOLUTION OR OUTPUT FREQUENCIES FOR A FREQUENCY RESPONSE $ $ SOLUTION FROM THE OUTPUT LIST TABLE THAT GOES INTO THE SDR2 MODULE $ $ $ INPUT DATABLOCK: $ $ OUTPLIST - OUTPUT LIST FOR SDR2 (TABLE) $ $ OUTPUT DATABLOCK: $ $ TFVECT - COLUMN VECTOR OF TIME STEPS OR FREQUENCIES $ $ PARAMETERS: $ $ FREQRADN - INPUT, BCD. IF PASSED THROUGH AS "RADIAN" THEN $ $ EXTRACTED TABLE VALUES WILL BE MULTIPLIED BY 2*PI. $ $ $ TYPE,PARM,,CHAR8,N,FREQRADN=' ' $ TYPE,PARM,,RS,N,TFVALUE,FREQ2RAD=1.0 $ TYPE,PARM,,CS,N,SCALER $ TYPE,PARM,,I, N,IWORD=3 $ FILE TFROW=APPEND $ $ IF(FREQRADN = 'RADIAN') FREQ2RAD = 2.*PI(1.) $ $ MATGEN ,/I1X1/1/1 $ 1 X 1 IDENTITY MATRIX $ GRAB FIRST TIME STEP/FREQUENCY AND SCALE I1X1 $ PARAML OUTPLIST//'DTI'/0/S,N,IWORD/S,N,TFVALUE $ IF (IWORD < 0) THEN $ ERROR: AT LEAST ONE TIME/FREQ NEEDED $ MESSAGE //' ' $ MESSAGE //'*** USER SEMI-FATAL MESSAGE FROM SUBDMAP TFVECTOR' $ MESSAGE //' NO OUTPUT TIME STEPS OR FREQUENCIES FOUND IN '/ 'OUTPUT LIST - SUBROUTINE CANNOT CONTINUE' $ MESSAGE //' ' $ RETURN $ $ ENDIF $ CONTINUE IF AT LEAST 1ST STEP IS FOUND $ SCALER = CMPLX((FREQ2RAD*TFVALUE), 0.) $ MULTIPLY TABLE VALUE $ ADD I1X1,/TFROW/SCALER $ SCALE 1X1 IDENTITY MATRIX BY TABLE VALUE $ $ $ NOW LOOP THROUGH LIST UNTIL IWORD IS RETURNED NEGATIVE $ DO WHILE (IWORD > 0) $ IWORD = IWORD + 1 $ PARAML OUTPLIST//'DTI'/0/S,N,IWORD/S,N,TFVALUE $ IF(IWORD < 0) JUMP OUTALOOP $ SCALER = CMPLX((FREQ2RAD*TFVALUE),0.) $ ADD I1X1,/DUMMY/SCALER $ APPEND DUMMY,/TFROW/2 $ APPEND DUMMY ONTO TFROW ENDDO $ LABEL OUTALOOP $ TRNSP TFROW/TFVECT $ CONVERT TO COLUMN VECTOR RETURN $ END $ ---------------------------------------------------------------- $ $ echoon $