From eff33f5a9b3d11aef57d080a6cebc2b171277458 Mon Sep 17 00:00:00 2001
From: aheinri5 <Anna@netzkritzler.de>
Date: Thu, 3 Dec 2020 20:45:43 +0100
Subject: [PATCH] #7 Added looots of new parameters

---
 R/prj_process_variable.R | 373 +++++++++++++++++++++++++++++++++------
 1 file changed, 322 insertions(+), 51 deletions(-)

diff --git a/R/prj_process_variable.R b/R/prj_process_variable.R
index d4a7283..6e3f404 100644
--- a/R/prj_process_variable.R
+++ b/R/prj_process_variable.R
@@ -1,42 +1,78 @@
 
+#===== r2ogs6_process_variable =====
+
 
 #'r2ogs6_process_variable
-#'@description S3 class describing a .prj process variable
-#'@param name The name of the process variable
-#'@param components The components of the process variable
-#'@param order The order of the process variable
-#'@param initial_condition The initial condition of the process variable
-#'@param boundary_conditions The boundary conditions of the process variable
+#'@description tag: process_variable
+#'@param name string: The name of the process variable
+#'@param components string | double:
+#'@param order string | double:
+#'@param initial_condition string:
+#'@param boundary_conditions list, r2ogs6_boundary_condition:
 #'@export
-r2ogs6_process_variable <- function(name, components, order, initial_condition, boundary_conditions){
+r2ogs6_process_variable <- function(name,
+                                    components,
+                                    order,
+                                    initial_condition,
+                                    boundary_conditions = NULL,
+                                    source_terms = NULL,
+                                    mesh = NULL,
+                                    deactivated_subdomains = NULL){
 
     #Coerce input
-    if(assertthat::is.string(components)){
-        components <- as.double(components)
-    }
+    components <- coerce_string_to_numeric(components)
+    order <- coerce_string_to_numeric(order)
 
-    if(assertthat::is.string(order)){
-        order <- as.double(order)
-    }
-
-    new_r2ogs6_process_variable(name, components, order, initial_condition, boundary_conditions)
+    new_r2ogs6_process_variable(name,
+                                components,
+                                order,
+                                initial_condition,
+                                boundary_conditions,
+                                source_terms,
+                                mesh,
+                                deactivated_subdomains)
 }
 
 
-new_r2ogs6_process_variable <- function(name, components, order, initial_condition, boundary_conditions){
+new_r2ogs6_process_variable <- function(name,
+                                        components,
+                                        order,
+                                        initial_condition,
+                                        boundary_conditions = NULL,
+                                        source_terms = NULL,
+                                        mesh = NULL,
+                                        deactivated_subdomains = NULL){
 
     assertthat::assert_that(assertthat::is.string(name))
     assertthat::assert_that(assertthat::is.number(components))
     assertthat::assert_that(assertthat::is.number(order))
     assertthat::assert_that(assertthat::is.string(initial_condition))
 
-    validate_wrapper_list(boundary_conditions, "r2ogs6_boundary_condition")
+    if(!is.null(boundary_conditions)){
+        validate_wrapper_list(boundary_conditions,
+                              "r2ogs6_boundary_condition")
+    }
+
+    if(!is.null(source_terms)){
+        validate_wrapper_list(source_terms,
+                              "r2ogs6_source_term")
+    }
+
+    validate_is_null_or_string(mesh)
+
+    if(!is.null(source_terms)){
+        validate_wrapper_list(deactivated_subdomains,
+                              "r2ogs6_deactivated_subdomain")
+    }
 
     structure(list(name = name,
                    components = components,
                    order = order,
                    initial_condition = initial_condition,
                    boundary_conditions = boundary_conditions,
+                   source_terms = source_terms,
+                   mesh = mesh,
+                   deactivated_subdomains = deactivated_subdomains,
                    tag_name = "process_variable",
                    is_subclass = FALSE,
                    attr_names = character(),
@@ -47,61 +83,175 @@ new_r2ogs6_process_variable <- function(name, components, order, initial_conditi
 }
 
 
-#============================== BOUNDARY_CONDITION ================================
+#===== r2ogs6_boundary_condition =====
 
 
 #'r2ogs6_boundary_condition
-#'@description S3 class describing a .prj boundary condition
-#'@param type ...
-#'@param parameter ...
-#'@param component ...
-#'@param mesh ...
-#'@param geometrical_set ...
-#'@param geometry ...
+#'@description tag: boundary_condition
+#'@param type string:
+#'@param parameter string:
+#'@param geometrical_set Optional: string:
+#'@param geometry Optional: string:
+#'@param component Optional: string | double:
+#'@param mesh Optional: string:
+#'@param alpha Optional: string:
+#'@param u_0 Optional: string:
+#'@param constraint_type Optional: string:
+#'@param constraining_process_variable Optional: string:
+#'@param constraint_threshold Optional: string | double:
+#'@param constraint_direction Optional: string:
+#'@param area_parameter Optional: string:
+#'@param bc_object Optional: string:
+#'@param flush_stdout Optional: string:
+#'@param property_name Optional: string:
+#'@param initial_value_parameter Optional: string:
+#'@param constant_name Optional: string:
+#'@param coefficient_current_variable_name Optional: string:
+#'@param coefficient_other_variable_name Optional: string:
+#'@param coefficient_mixed_variables_name Optional: string:
+#'@param threshold_parameter Optional: string:
+#'@param comparison_operator Optional: string:
+#'@param time_interval Optional: list of 2, character:
 #'@export
-r2ogs6_boundary_condition <- function(type, parameter, component = NULL, mesh = NULL, geometrical_set = NULL,
-                                      geometry = NULL){
+r2ogs6_boundary_condition <- function(type,
+                                      parameter = NULL,
+                                      geometrical_set = NULL,
+                                      geometry = NULL,
+                                      component = NULL,
+                                      mesh = NULL,
+                                      alpha = NULL,
+                                      u_0 = NULL,
+                                      constraint_type = NULL,
+                                      constraining_process_variable = NULL,
+                                      constraint_threshold = NULL,
+                                      constraint_direction = NULL,
+                                      area_parameter = NULL,
+                                      bc_object = NULL,
+                                      flush_stdout = NULL,
+                                      property_name = NULL,
+                                      initial_value_parameter = NULL,
+                                      constant_name = NULL,
+                                      coefficient_current_variable_name = NULL,
+                                      coefficient_other_variable_name = NULL,
+                                      coefficient_mixed_variables_name = NULL,
+                                      threshold_parameter = NULL,
+                                      comparison_operator = NULL,
+                                      time_interval = NULL){
 
     #Coerce input
-    if(!is.null(component)){
-        if(assertthat::is.string(component)){
-            component <- as.double(component)
-        }
-    }
+    component <- coerce_string_to_numeric(component)
+    constraint_threshold <- coerce_string_to_numeric(constraint_threshold)
 
-    new_r2ogs6_boundary_condition(type, parameter, component, mesh, geometrical_set, geometry)
+    new_r2ogs6_boundary_condition(type,
+                                  parameter,
+                                  geometrical_set,
+                                  geometry,
+                                  component,
+                                  mesh,
+                                  alpha,
+                                  u_0,
+                                  constraint_type,
+                                  constraining_process_variable,
+                                  constraint_threshold,
+                                  constraint_direction,
+                                  area_parameter,
+                                  bc_object,
+                                  flush_stdout,
+                                  property_name,
+                                  initial_value_parameter,
+                                  constant_name,
+                                  coefficient_current_variable_name,
+                                  coefficient_other_variable_name,
+                                  coefficient_mixed_variables_name,
+                                  threshold_parameter,
+                                  comparison_operator,
+                                  time_interval)
 }
 
 
-new_r2ogs6_boundary_condition <- function(type, parameter, component = NULL, mesh = NULL, geometrical_set = NULL,
-                                          geometry = NULL){
-
+new_r2ogs6_boundary_condition <- function(type,
+                                          parameter = NULL,
+                                          geometrical_set = NULL,
+                                          geometry = NULL,
+                                          component = NULL,
+                                          mesh = NULL,
+                                          alpha = NULL,
+                                          u_0 = NULL,
+                                          constraint_type = NULL,
+                                          constraining_process_variable = NULL,
+                                          constraint_threshold = NULL,
+                                          constraint_direction = NULL,
+                                          area_parameter = NULL,
+                                          bc_object = NULL,
+                                          flush_stdout = NULL,
+                                          property_name = NULL,
+                                          initial_value_parameter = NULL,
+                                          constant_name = NULL,
+                                          coefficient_current_variable_name = NULL,
+                                          coefficient_other_variable_name = NULL,
+                                          coefficient_mixed_variables_name = NULL,
+                                          threshold_parameter = NULL,
+                                          comparison_operator = NULL,
+                                          time_interval = NULL){
 
     assertthat::assert_that(assertthat::is.string(type))
-    assertthat::assert_that(assertthat::is.string(parameter))
 
-    if(!is.null(component)){
-        assertthat::assert_that(assertthat::is.number(component))
-    }
+    validate_is_null_or_number(component,
+                               constraint_threshold)
 
-    if(!is.null(mesh)){
-        assertthat::assert_that(assertthat::is.string(mesh))
-    }
+    validate_is_null_or_string(parameter,
+                               geometrical_set,
+                               geometry,
+                               mesh,
+                               alpha,
+                               u_0,
+                               constraint_type,
+                               constraining_process_variable,
+                               constraint_direction,
+                               area_parameter,
+                               bc_object,
+                               property_name,
+                               initial_value_parameter,
+                               constant_name,
+                               coefficient_current_variable_name,
+                               coefficient_other_variable_name,
+                               coefficient_mixed_variables_name,
+                               threshold_parameter,
+                               comparison_operator)
 
-    if(!is.null(geometrical_set)){
-        assertthat::assert_that(assertthat::is.string(geometrical_set))
-    }
+    validate_true_false_str(flush_stdout)
 
-    if(!is.null(geometry)){
-        assertthat::assert_that(assertthat::is.string(geometry))
-    }
+    time_interval <- validate_time_interval(time_interval,
+                                            is_optional = TRUE)
 
     structure(list(type = type,
                    parameter = parameter,
-                   component = component,
-                   mesh = mesh,
                    geometrical_set = geometrical_set,
                    geometry = geometry,
+                   component = component,
+                   mesh = mesh,
+                   alpha = alpha,
+                   u_0 = u_0,
+                   constraint_type = constraint_type,
+                   constraining_process_variable =
+                       constraining_process_variable,
+                   constraint_threshold = constraint_threshold,
+                   constraint_direction = constraint_direction,
+                   area_parameter = area_parameter,
+                   bc_object = bc_object,
+                   flush_stdout = flush_stdout,
+                   property_name = property_name,
+                   initial_value_parameter = initial_value_parameter,
+                   constant_name = constant_name,
+                   coefficient_current_variable_name =
+                       coefficient_current_variable_name,
+                   coefficient_other_variable_name =
+                       coefficient_other_variable_name,
+                   coefficient_mixed_variables_name =
+                       coefficient_mixed_variables_name,
+                   threshold_parameter = threshold_parameter,
+                   comparison_operator = comparison_operator,
+                   time_interval = time_interval,
                    tag_name = "boundary_condition",
                    is_subclass = TRUE,
                    attr_names = character(),
@@ -110,3 +260,124 @@ new_r2ogs6_boundary_condition <- function(type, parameter, component = NULL, mes
               class = "r2ogs6_boundary_condition"
     )
 }
+
+
+#===== r2ogs6_source_term =====
+
+
+#'r2ogs6_source_term
+#'@description tag: source_term
+#'@param type string:
+#'@param parameter Optional: string:
+#'@param geometrical_set Optional: string:
+#'@param geometry Optional: string:
+#'@param mesh Optional: string:
+#'@param source_term_object Optional: string:
+#'@export
+r2ogs6_source_term <- function(type,
+                               parameter = NULL,
+                               geometrical_set = NULL,
+                               geometry = NULL,
+                               mesh = NULL,
+                               source_term_object = NULL){
+
+    #Coerce input
+
+    new_r2ogs6_source_term(type,
+                           parameter,
+                           geometrical_set,
+                           geometry,
+                           mesh,
+                           source_term_object)
+}
+
+
+new_r2ogs6_source_term <- function(type,
+                                   parameter = NULL,
+                                   geometrical_set = NULL,
+                                   geometry = NULL,
+                                   mesh = NULL,
+                                   source_term_object = NULL){
+
+    assertthat::assert_that(assertthat::is.string(type))
+
+    validate_is_null_or_string(parameter,
+                               geometrical_set,
+                               geometry,
+                               mesh,
+                               source_term_object)
+
+    structure(list(type = type,
+                   parameter = parameter,
+                   geometrical_set = geometrical_set,
+                   geometry = geometry,
+                   mesh = mesh,
+                   source_term_object = source_term_object,
+                   tag_name = "source_term",
+                   is_subclass = TRUE,
+                   attr_names = character(),
+                   flatten_on_exp = character()
+    ),
+    class = "r2ogs6_source_term"
+    )
+}
+
+
+#===== r2ogs6_deactivated_subdomain =====
+
+
+#'r2ogs6_deactivated_subdomain
+#'@description tag: deactivated_subdomain
+#'@param time_interval list, numeric:
+#'@param material_ids string | double:
+#'@export
+r2ogs6_deactivated_subdomain <- function(time_interval,
+                                         material_ids){
+
+    #Coerce input
+    material_ids <- coerce_string_to_numeric(material_ids)
+
+    new_r2ogs6_deactivated_subdomain(time_interval,
+                                     material_ids)
+}
+
+
+new_r2ogs6_deactivated_subdomain <- function(time_interval,
+                                             material_ids){
+
+    time_interval <- validate_time_interval(time_interval)
+
+    assertthat::assert_that(assertthat::is.number(material_ids))
+
+    structure(list(time_interval = time_interval,
+                   material_ids = material_ids,
+                   tag_name = "deactivated_subdomain",
+                   is_subclass = TRUE,
+                   attr_names = character(),
+                   flatten_on_exp = character()
+    ),
+    class = "r2ogs6_deactivated_subdomain"
+    )
+}
+
+
+#===== time_interval =====
+
+
+validate_time_interval <- function(time_interval,
+                                   is_optional = FALSE){
+
+    if(is_optional && is.null(time_interval)){
+        return(invisible(time_interval))
+    }
+
+    assertthat::assert_that(is.list(time_interval))
+
+    for(i in seq_len(length(time_interval))){
+        time_interval[[i]] <-
+            validate_param_list(time_interval[[i]],
+                                c("start", "end"))
+    }
+
+    return(invisible(time_interval))
+}
-- 
GitLab