! begin file my_seg_col_inc ! ................................................................. ! ** SEG_COL_MATRIX PROBLEM DEPENDENT STATEMENTS FOLLOW ** ! For optional REAL (DP) :: C (LT_FREE) from Q_NORMAL_SEG, etc. ! Given: E (N_R_B, N_R_B), H_INTG (LT_N), PRT_L_PT (LT_N, N_NP_FLO), ! PRT_MAT (MISC_FL), L_PT_PROP (LT_N, N_NP_FIX), ! FLUX (L_B_N, N_G_FLUX), IE ! Given modules: Elem_Type_Data, Interface_Header, Select_source, ! System_Constants, Sys_Properties_Data, Geometric_Properties ! ! For Example: Poisson problems may have a scalar normal flux ! on a boundary segment (of thickness THICKNESS_SEG) of: ! K_n * U,n + Q_NORMAL_SEG = 0, where System_Constants can ! provide access to REAL(DP) :: Q_NORMAL_SEG, THICKNESS_SEG ! or CALL SELECT_EXACT_NORMAL_FLUX (XYZ, Q_NORMAL_SEG). ! Function COUNT_REAL_SP () gives number of properties input ! for gathering by function GET_REAL_SP. ! ! (NOTE: IS_FLUX_SEG SHOULD BE TRUE HERE) ! ................................................................. ! Define any new array or variable types, then give statements ! INTEGER, SAVE :: ! Needed on next call ! REAL(DP), SAVE :: ! Needed on next call ! LOGICAL, SAVE :: ! Needed on next call ! ! INTEGER :: ! Local use ! REAL(DP) :: ! Local use ! LOGICAL :: ! Local use !b INTEGER :: IQ !b REAL(DP) :: CONST, DET, THICK INTEGER, SAVE :: NOTE = 0 IF ( NOTE == 0 ) THEN ; NOTE = 1; IF ( DEBUG_SEG_COL .OR. DEBUG_INCLUDE ) PRINT *, & 'NOTE: USED my_seg_col_inc' PRINT *,'NOTE: NO APPLICATION my_seg_col_inc GIVEN' ! <===== END IF ! Given normal flux on an element face or edge: ! Standard form: -K_n * U,n = Q_NORMAL_SEG (in System_Constants) !! Get normal flux from keyword, or segment property ! IF ( COUNT_REAL_SP () > 0 ) Q_NORMAL_SEG= GET_REAL_SP (1) ! ! THICK = 1 ! Default flux line segment real property # 2 ! IF ( COUNT_REAL_SP () > 1 ) THICK = GET_REAL_SP (2) ! ! ! IF ( LT_N > 1 ) THEN ! Not a point value ! ! DO IQ = 1, LT_QP ! NUMERICAL INTEGRATION LOOP ! ! H = GET_H_AT_QP (IQ) ! BOUNDARY INTERPOLATION FUNCTIONS !! FIND GLOBAL COORD, XYZ = H*COORD (ISOPARAMETRIC) ! XYZ = MATMUL (H, COORD) !! FIND LOCAL DERIVATIVES ! DLH = GET_DLH_AT_QP (IQ) ! !! FORM DETERMINATE OF GENERALIZED JACOBIAN ! DET = PARM_GEOM_METRIC (DLH, COORD) ! dX / dr ! IF ( AXISYMMETRIC ) THICK = TWO_PI * XYZ (1) ! via axisymmetric ! CONST = DET * WT(IQ) * THICK ! !! GET NORMAL FLUX COMPONENT ! IF ( USE_EXACT_FLUX ) CALL SELECT_EXACT_NORMAL_FLUX & ! (XYZ, Q_NORMAL_SEG) ! via keyword use_exact_flux ! C = C + Q_NORMAL_SEG * CONST * H ! Source vector ! END DO ! ! ELSE ! This is a point value ! ! IF ( USE_EXACT_FLUX ) CALL SELECT_EXACT_NORMAL_FLUX & ! (COORD (1, :), Q_NORMAL_SEG) ! via use_exact_flux ! C (1) = Q_NORMAL_SEG ! ! END IF ! boundary segment type ! *** END SEG_COL_MATRIX PROBLEM DEPENDENT STATEMENTS *** ! end file my_seg_col_inc